對於我的應用程序,我需要創建一個對話框而不使用資源。 我正在嘗試使用DialogBoxInderect函數。代碼難以置信地醜陋,但不知何故,我成功地做到了。DialogBoxIndirect創建的對話框大於
問題是,出於某種原因,對話框比我用更大的字體問得多。
下面是對話的樣子,如果我加載它從資源:
這裏是說同樣大小的對話框當我打電話DialogBoxInderect功能。
這裏是它是如何在代碼中定義:
HGLOBAL hGlobal;
LPDLGTEMPLATE wlsDialogTemplate;
LPDLGITEMTEMPLATE wlsDialogItemTemplate;
LPWORD nextItem;
LPWSTR itemString;
int32_t itemStringLength;
// Check for memory allocation errors
hGlobal = GlobalAlloc(GMEM_ZEROINIT, 1024);
if (!hGlobal)
return -1;
wlsDialogTemplate = (LPDLGTEMPLATE)GlobalLock(hGlobal);
// Define a dialog box.
wlsDialogTemplate->style = WS_CAPTION;
wlsDialogTemplate->x = 0;
wlsDialogTemplate->y = 0;
wlsDialogTemplate->cx = 320;
wlsDialogTemplate->cy = 115;
GlobalUnlock(hGlobal);
retCode = DialogBoxIndirect(0, (LPDLGTEMPLATE)hGlobal, 0, ActivateWlsMsgDialog);
這裏是它是如何在RC文件中定義:
IDD_WLS_SMALL_MESSAGE_DLG DIALOGEX 0, 0, 320, 115
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
CAPTION "Dialog"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",ID_CUSTOM_OK,175,95,120,15
PUSHBUTTON "Cancel",ID_CUSTOM_CANCEL,45,95,120,15
CTEXT "Static",IDC_HEADER_TEXT,120,10,170,70
CONTROL "",IDC_LOGO,"Static",SS_BITMAP,16,10,83,70
END
正如你所看到的,第二個對話框是多少比定義的大。我試圖玩各種風格的旗幟,但沒有任何成功(這就是爲什麼在更大的對話中有紅十字)。
任何幫助嗎? 謝謝!
非常感謝您的快速回復。是的,我懷疑問題是字體,但是,我找不到任何示例,我如何將字體信息添加到標題。你能幫助我嗎?將所需的字體設置爲對WM_INITDIALOG的響應將無法實現,因爲它會更改字體,但不會調整對話框的大小,除非手動調整它的大小。 – 2012-02-09 09:05:30
順便說一句,技術術語是DLU = dialog units。您(通常)在DLUs中設計對話框而不是像素 – demorge 2012-02-09 10:30:57
@Iron:您可以在MSDN上找到其他背景信息(http://msdn.microsoft.com/en-us/library/windows/desktop/ms644994。 aspx#字體)(真的是整個文章)。我認爲如果你明白它是如何工作的,編寫實際的代碼是很容易的部分。但是Google的搜索示例代碼很快就會出現[此對話框模板類](http://www.flipcode.com/archives/DialogTemplate.cpp)。我不知道爲什麼'WM_INITDIALOG'不適合你;我一直這樣做,一切都得到正確調整。 – 2012-02-09 17:56:20