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
- Procedimientos de enlace para cuadros de diálogo comunes
- Mensajes de diálogo comunes
- Soporte técnico de ayuda
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 .