winuser.h

Macro CreateDialogIndirect

Crea un cuadro de diálogo no modal a partir de una plantilla de cuadro de diálogo en memoria. La macro CreateDialogIndirect usa la función CreateDialogIndirectParam.

Definición

void CreateDialogIndirectA(
  HINSTANCE hInstance,
  LPCDLGTEMPLATE lpTemplate,
  HWND hWndParent,
  DLGPROC lpDialogFunc
);

Descripción

hInstance
Un manipulador al módulo que crea el cuadro de diálogo.
lpTemplate

Una plantilla que CreateDialogIndirect usará para crear el cuadro de diálogo. Una plantilla de cuadro de diálogo consiste en una cabecera que describe el cuadro de diálogo, seguido por uno o más bloques de datos adicionales que describen cada uno de los controles en el cuadro de diálogo. La plantilla puede usar tanto el formato estándar como el extendido.

En una plantilla estándar, la cabecera es una estructura DLGTEMPLATE seguida de arrays de longitud variable adicionales. Los datos de cada control consisten en una estructura DLGITEMTEMPLATE seguida por arrays de longitud variable adicionales.

En una plantilla de cuadro de diálogo extendida, la cabecera usa el formato DLGTEMPLATEEX y las definiciones de controles el formato DLGITEMTEMPLATEEX.

Después de que CreateDialogIndirect retorne, se puede liberar la plantilla, que solo se usa para iniciar el cuadro de diálogo.

hWndParent
Un manipulador de la ventana a la que pertenece el cuadro de diálogo.
lpDialogFunc
Un puntero al procedimiento del cuadro de diálogo. Para mayor información sobre ese procedimiento, ver DialogProc.

Valor de retorno

Ninguno.

Observaciones

La macro CreateDialogIndirect usa la función CreateWindowEx para crear el cuadro de diálogo. CreateDialogIndirect envía entonces un mensaje WM_INITDIALOG al procedimiento de diálogo. Si la plantilla especifica el estilo DS_SETFONT o DS_SHELLFONT, la función también envía un mensaje WM_SETFONT al procedimiento de diálogo. La función también muestra el cuadro de diálogo si la plantilla especifica el estilo WS_VISIBLE. Finalmente, CreateDialogIndirect devuelve el manipulador de ventana del cuadro de diálogo.

Después de que CreateDialogIndirect regrese, se puede usar la función ShowWindow para mostrar el cuadro de diálogo (si no es visible todavía). Para destruir el cuadro de diálogo, usar la función DestroyWindow. Para soportar la navegación a través del teclado y otras funcionalidades de los cuadros de diálogo, el bucle de mensajes para el cuadro de diálogo debe invocar a la función IsDialogMessage.

En una plantilla de cuadro de diálogo estándar, la estructura DLGTEMPLATE y cada estructura DLGITEMTEMPLATE deben estar alineadas en los límites de DWORD. La creación del array de datos que sigue a la estructura DLGITEMTEMPLATE también debe estar alineada en los límites DWORD. El resto de arrays de longitud variable en la plantilla deben estar alineados en los límites de WORD.

En una plantilla de cuadro de diálogo extendida, la cabecera DLGTEMPLATEEX y cada una de las definiciones de controles DLGITEMTEMPLATEEX deben estar alineadas en los límites de DWORD. El array de datos de creación, si lo hay, que sigue a la estructura DLGITEMTEMPLATEEX también debe estar alineada en los límites de DWORD. El resto de arrays de longitud variable en la plantilla deben estar alineados en los límites de WORD.

Todas las cadenas de caracteres en la plantilla de cuadro de diálogo, como los títulos del diálogo y botones, deben ser cadenas Unicode. Usar la función MultiByteToWideChar para generar cadenas Unicode a partir de cadenas ANSI.

Nota: El fichero de cabecera winuser.h define CreateDialogIndirect como un alias que selecciona automáticamente la versión ANSI o Unicode de esta macro basándose en la definición de la constante UNICODE del preprocesador. Mezclar el uso de alias de codificación neutral con código que no lo sea puede producir desajustes que resultarán en errores de compilación o ejecución.