Для моего приложения мне нужно создать диалоговое окно без использования ресурсов. Я пытаюсь сделать это с помощью функции DialogBoxInderect . Код невероятно уродлив, но как-то мне это удалось.
Проблема в том, что диалог по какой-то причине намного больше, чем я просил, с гораздо более крупными шрифтами.
Вот как выглядит диалог, если я загружу его из ресурса:
А вот диалоговое окно с тем же размером, указанным при вызове функции 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
Как вы можете видеть, второй диалог намного больше, чем определено. Я пробовал поиграть с разными флагами стилей, но безуспешно (вот почему в большом диалоге есть красный крест).
С этим можно что-нибудь сделать? Спасибо!