Para mi aplicación, necesito crear un cuadro de diálogo sin usar el recurso. Estoy tratando de hacerlo con DialogBoxInderect función. El código es increíblemente feo, pero de alguna manera lo logré.DialogBoxIndirect crea un diálogo más grande que
El problema es que el diálogo, por alguna razón, es mucho más grande de lo que pedí con fuentes mucho más grandes.
Aquí es cómo el diálogo se ve como si lo cargo a partir de recursos:
Y aquí es el diálogo con el mismo tamaño indicado cuando llamo DialogBoxInderect función.
Aquí es como se define en el código:
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);
Y aquí es como se define en el archivo 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
Como se puede ver, el segundo de diálogo es mucho más grande que definido. Traté de jugar con varias banderas de estilo pero sin ningún éxito (es por eso que hay una cruz roja en el diálogo más grande).
¿Alguna ayuda con eso? Gracias!
Muchas gracias por la respuesta rápida. Sí, sospeché que el problema es la fuente, sin embargo, no pude encontrar ningún ejemplo. ¿Cómo agrego la información de la fuente al encabezado? ¿Me puede ayudar con eso? Establecer la fuente requerida como respuesta a WM_INITDIALOG no servirá, ya que cambiará la fuente pero no cambiará el tamaño del cuadro de diálogo a menos que cambie el tamaño manualmente. –
Por cierto, el término técnico es DLU = unidades de diálogo. Usted (por lo general) diseña un cuadro de diálogo en DLU, no píxeles – demorge
@Iron: encontrará información de fondo adicional [aquí en MSDN] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms644994. fuentes aspx #) (y realmente ese artículo completo). Creo que si entiendes cómo funciona todo, escribir el código real es la parte fácil. Pero aparece una búsqueda rápida de Google para el código de muestra [esta clase de plantilla de diálogo] (http://www.flipcode.com/archives/DialogTemplate.cpp). No sé por qué 'WM_INITDIALOG' no funciona para usted; Lo hago de esa manera todo el tiempo y todo se redimensiona correctamente. –