Personalización de cuadros de diálogo comunes

Puede usar los cuadros de diálogo comunes en su formato estándar o personalizarlos. Desde la perspectiva del usuario, la ventaja principal del cuadro de diálogo común es su apariencia y funcionalidad coherentes de la aplicación a la aplicación. Por lo tanto, es importante personalizar un cuadro de diálogo común solo cuando sea absolutamente necesario para una aplicación. De lo contrario, se pierden la apariencia coherente y la interfaz de codificación simple. Las personalizaciones adecuadas dejan intactos tantos controles originales como sea posible. Aumentar el tamaño del cuadro de diálogo o agregar nuevos controles en el espacio que ya está disponible en el cuadro de diálogo es una personalización adecuada. Ocultar controles originales o cambiar la funcionalidad prevista de los controles originales es una personalización menos adecuada.

En esta sección se describen los métodos siguientes para personalizar un cuadro de diálogo común:

Plantillas personalizadas

Los cuadros de diálogo comunes tienen plantillas predeterminadas que definen el número, el tipo y la posición de los controles estándar en el cuadro de diálogo. Puede definir una plantilla personalizada para conceder a los usuarios acceso a controles adicionales que son exclusivos de la aplicación.

Para todos los cuadros de diálogo comunes excepto los cuadros de diálogo Abrir y Guardar como de estilo explorador, modifique la plantilla predeterminada para crear una plantilla personalizada que reemplace la plantilla predeterminada. La plantilla personalizada define el tipo y la posición de los controles estándar, así como los controles adicionales.

Al crear una plantilla de cuadro de diálogo personalizada modificando la plantilla de cuadro de diálogo predeterminada, asegúrese de que los identificadores de los controles agregados son únicos y no entran en conflicto con los identificadores de los controles estándar. En la tabla siguiente se muestra el nombre del archivo de plantilla predeterminado e incluir archivo para cada uno de los tipos de cuadro de diálogo comunes.

Tipo de cuadro de diálogo Archivo de plantilla Incluir archivo
Color Color.dlg ColorDlg.h
Buscar Findtext.dlg Dlgs.h
Fuente Font.dlg Dlgs.h
Abrir (selección múltiple) Fileopen.dlg Dlgs.h
Abrir (selección única) Fileopen.dlg Dlgs.h
Configuración de página Prnsetup.dlg Dlgs.h
Imprimir Prnsetup.dlg Dlgs.h
Instalación de impresión (obsoleta) Prnsetup.dlg Dlgs.h
Sustituya Findtext.dlg Dlgs.h

Para habilitar una plantilla personalizada, debe establecer una marca en el miembro Flags de la estructura correspondiente para el cuadro de diálogo. Si la plantilla es un recurso de una aplicación o biblioteca de vínculos dinámicos, establezca una marca ENABLETEMPLATE en el miembro Flags y use los miembros hInstance y lpTemplateName de la estructura para identificar el módulo y el nombre del recurso. Si la plantilla ya está en memoria, establezca una marca ENABLETEMPLATEHANDLE en el miembro Flags y use el miembro hInstance para identificar el objeto de memoria que contiene la plantilla.

En la mayoría de los casos, también debe habilitar un procedimiento de enlace para que el cuadro de diálogo admita y procese la entrada de los controles adicionales de la plantilla personalizada.

Para los cuadros de diálogo Abrir y Guardar como de estilo explorador, las plantillas predeterminadas no están disponibles para su modificación. En su lugar, la plantilla personalizada define un cuadro de diálogo secundario que incluye solo los elementos que se van a agregar al cuadro de diálogo estándar. La plantilla personalizada también puede definir un control estático que especifica la ubicación del clúster de controles estándar en el cuadro de diálogo secundario. Para obtener más información, vea Plantillas personalizadas de estilo explorador.

Procedimientos de enlace para cuadros de diálogo comunes

Para cada uno de los cuadros de diálogo comunes, puede habilitar un procedimiento de enlace para procesar mensajes desde el procedimiento de cuadro de diálogo predeterminado. Hay dos tipos generales de procedimientos comunes de enlace de diálogo:

  • Procedimiento de enlace estándar usado con los cuadros de diálogo más comunes
  • Procedimiento de enlace de estilo explorador admitido por los cuadros de diálogo Abrir y Guardar como

Cuando se proporciona un procedimiento de enlace estándar para uno de los cuadros de diálogo comunes, el procedimiento de cuadro de diálogo predeterminado controla sus mensajes de la siguiente manera.

Message Controlar
WM_INITDIALOG El procedimiento de cuadro de diálogo predeterminado procesa el mensaje antes de pasarlo al procedimiento de enlace. El parámetro lParam del mensaje es un puntero a la estructura de inicialización especificada cuando se creó el cuadro de diálogo.
Todos los demás mensajes El procedimiento de enlace recibe primero el mensaje. A continuación, el valor devuelto del procedimiento de enlace determina si el procedimiento de diálogo predeterminado procesa el mensaje o lo omite.

Para los cuadros de diálogo Abrir y Guardar como de estilo explorador, el procedimiento de enlace no recibe mensajes destinados a los controles estándar del cuadro de diálogo. En su lugar, recibe mensajes de notificación del cuadro de diálogo y mensajes de los controles adicionales definidos en una plantilla personalizada. Para obtener más información, vea Procedimientos de enlace de estilo explorador.

Para habilitar un procedimiento de enlace, establezca un valor ENABLEHOOK en el miembro Flags de la estructura correspondiente para el cuadro de diálogo. Si se establece una marca ENABLEHOOK , un miembro lpfnHook de la estructura debe especificar la dirección del procedimiento de enlace.

En la tabla siguiente se muestra el tipo de procedimiento de enlace que se va a proporcionar para cada uno de los cuadros de diálogo comunes.

Tipo de cuadro de diálogo Procedimiento de enlace
Color CCHookProc
Buscar o reemplazar FRHookProc
Fuente CFHookProc
Abrir o guardar como (estilo explorador) OFNHookProc
Abrir o guardar como (estilo antiguo) OFNHookProcOldStyle
Imprimir PrintHookProc
Configuración de página PageSetupHook

Para el cuadro de diálogo Configurar página , también puede especificar un procedimiento de enlace PagePaintHook . Se trata de un procedimiento de enlace especial que puede usar para personalizar la apariencia de la página de ejemplo mostrada por el cuadro de diálogo Configurar página.

Nota

El cuadro de diálogo Configurar impresión se ha reemplazado por el cuadro de diálogo Configurar página . Las aplicaciones deben usar el cuadro de diálogo Configurar página . Sin embargo, por motivos de compatibilidad, la función PrintDlg sigue admitiendo la visualización del cuadro de diálogo Configurar impresión . Puede proporcionar un procedimiento de enlace SetupHookProc para el cuadro de diálogo Configurar impresión .

Mensajes de diálogo comunes

Los cuadros de diálogo comunes usan mensajes para notificar a su procedimiento de ventana o procedimiento de enlace cuando se producen determinados eventos. Además, hay mensajes que puede enviar a un cuadro de diálogo común para recuperar información o para controlar el comportamiento o la apariencia del cuadro de diálogo. En esta sección se describen los mensajes de diálogo comunes registrados por la función RegisterWindowMessage , los mensajes usados por el cuadro de diálogo Fuente y el cuadro de diálogo Configurar página , y los mensajes usados por los cuadros de diálogo Abrir y Guardar como de estilo Explorador.

La biblioteca común de cuadros de diálogo define un conjunto de cadenas de mensajes. Puede pasar una constante asociada a una de estas cadenas de mensaje a RegisterWindowMessage para obtener un identificador de mensaje. A continuación, puede usar el identificador para detectar y procesar mensajes enviados desde un cuadro de diálogo común o para enviar mensajes a un cuadro de diálogo común. En la tabla siguiente se muestran las constantes de mensaje y se describe su uso.

Contants Uso
COLOROKSTRING Un cuadro de diálogo Color envía este mensaje al procedimiento de enlace cuando el usuario selecciona un color y hace clic en el botón Aceptar . El procedimiento de enlace puede aceptar el color o rechazarlo y forzar que el cuadro de diálogo permanezca abierto.
FILEOKSTRING Un cuadro de diálogo Abrir o Guardar como envía este mensaje al procedimiento de enlace cuando el usuario selecciona un nombre de archivo y hace clic en el botón Aceptar . El procedimiento de enlace puede aceptar el nombre de archivo o rechazarlo y forzar que el cuadro de diálogo permanezca abierto. En el caso de los cuadros de diálogo Abrir y Guardar como de estilo explorador, este mensaje se ha reemplazado por el mensaje de notificación de CDN_FILEOK .
FINDMSGSTRING Un cuadro de diálogo Buscar o reemplazar envía este mensaje al procedimiento de ventana de su ventana primaria cuando el usuario hace clic en buscar siguiente, reemplazar o reemplazar todo, o cierra el cuadro de diálogo. El parámetro lParam del mensaje es un puntero a una estructura FINDREPLACE que contiene la entrada del usuario.
HELPMSGSTRING Todos los cuadros de diálogo comunes envían este mensaje al procedimiento de ventana de su ventana primaria cuando el usuario hace clic en el botón Ayuda . Para los cuadros de diálogo Abrir y Guardar como de estilo explorador, este mensaje se ha reemplazado por el mensaje de notificación de CDN_HELP .
LBSELCHSTRING Un cuadro de diálogo Abrir o Guardar como envía este mensaje al procedimiento de enlace cuando el usuario cambia la selección en el cuadro de lista Nombre de archivo . En el caso de los cuadros de diálogo Abrir y Guardar como de estilo explorador, este mensaje se ha reemplazado por el mensaje de notificación de CDN_SELCHANGE .
SETRGBSTRING Un procedimiento de enlace puede enviar este mensaje a un cuadro de diálogo Color para establecer la selección de color actual.
SHAREVISTRING Un cuadro de diálogo Abrir o Guardar como envía este mensaje al procedimiento de enlace si se produce una infracción de uso compartido para el archivo seleccionado cuando el usuario hace clic en el botón Aceptar . Para los cuadros de diálogo Abrir y Guardar como de estilo explorador, este mensaje se ha reemplazado por el mensaje de notificación CDN_SHAREVIOLATION .

Algunos cuadros de diálogo comunes envían y reciben otros mensajes de ventana. El procedimiento de enlace de un cuadro de diálogo Fuente puede enviar cualquiera de los mensajes WM_CHOOSEFONT_* al cuadro de diálogo Fuente . Para obtener más información, vea Cuadro de diálogo Fuente. El cuadro de diálogo Configurar página envía los mensajes WM_PSD_* si ha habilitado un procedimiento de enlace PagePaintHook . Para obtener más información, vea Cuadro de diálogo Configurar página.

Los cuadros de diálogo Abrir y Guardar como de estilo explorador admiten un conjunto de mensajes predefinidos. Estos incluyen mensajes de notificación enviados en forma de un mensaje de WM_NOTIFY al procedimiento de enlace y mensajes que el procedimiento de enlace puede enviar al cuadro de diálogo. Para obtener una lista completa de estos mensajes, vea Procedimientos de enlace de estilo explorador.

Soporte técnico de ayuda

Los cuadros de diálogo comunes proporcionan ayuda contextual para los controles estándar del cuadro de diálogo. Para proporcionar ayuda adicional para un cuadro de diálogo común, puede mostrar un botón Ayuda y procesar los mensajes generados cuando el usuario hace clic en el botón. El botón Ayuda es un complemento para la ayuda contextual predeterminada. El botón Ayuda es útil para describir el propósito general del cuadro de diálogo, ya que se aplica a la aplicación.

ayuda de Context-Sensitive

Todos los cuadros de diálogo comunes proporcionan ayuda contextual para los controles estándar del cuadro de diálogo. El usuario puede mostrar ayuda para controles individuales mediante cualquiera de los métodos siguientes:

  • Seleccionar el control y presionar la tecla F1.
  • Haga clic en el botón ? de la barra de título y, después, haga clic en un control.
  • Haga clic en el botón derecho del mouse sobre un control.

Si personaliza un cuadro de diálogo agregando nuevos controles, también debe ampliar la compatibilidad con estos controles mediante el procesamiento de solicitudes de ayuda en el procedimiento de enlace. El procedimiento de enlace recibe los siguientes mensajes cuando el usuario solicita ayuda.

Acción del usuario Message
Haga clic en el botón derecho del mouse sobre un control. WM_CONTEXTMENU
Presionó la tecla F1. WM_HELP
Haga clic en el botón ? de la barra de título y, a continuación, haga clic en un control. WM_HELP

Debe procesar estos mensajes para los controles que ha agregado, pero deje que el procedimiento del cuadro de diálogo predeterminado procese los mensajes de los controles estándar. Para obtener más información sobre cómo procesar estos mensajes, vea Ayuda.

Botón Ayuda

Puede mostrar un botón Ayuda en cualquiera de los cuadros de diálogo comunes estableciendo un valor SHOWHELP en el miembro Flags de la estructura de inicialización para el cuadro de diálogo. Si muestra el botón Ayuda , debe procesar la solicitud de ayuda del usuario. El procesamiento se puede realizar en uno de los procedimientos de ventana de la aplicación o en un procedimiento de enlace para el cuadro de diálogo. Normalmente, procesaría la solicitud de ayuda llamando a la función WinHelp .

Para procesar los mensajes de ayuda en uno de los procedimientos de ventana, debe obtener un identificador de mensaje para la cadena definida por el valor HELPMSGSTRING e identificar la ventana para recibir mensajes. Para obtener el identificador del mensaje, especifique HELPMSGSTRING como parámetro en una llamada a la función RegisterWindowMessage . Al crear el cuadro de diálogo, use el miembro hwndOwner de la estructura de inicialización del cuadro de diálogo para identificar la ventana que va a recibir los mensajes. El procedimiento del cuadro de diálogo envía el mensaje al procedimiento de ventana cada vez que el usuario hace clic en el botón Ayuda .

Para procesar mensajes de ayuda en un procedimiento de enlace, debe procesar el mensaje WM_COMMAND . El procedimiento de enlace proporciona ayuda si el parámetro wParam de este mensaje indica que el usuario ha realizado clic en el botón Ayuda . El identificador del botón Ayuda es la constante pshHelp definida en el archivo Dlgs.h.

Los procedimientos de enlace para los cuadros de diálogo Abrir y Guardar como de estilo explorador no reciben mensajes de WM_COMMAND para el botón Ayuda . En su lugar, el cuadro de diálogo envía un mensaje de notificación CDN_HELP al procedimiento de enlace cuando se hace clic en el botón Ayuda .