Un control común de barra de herramientas de Windows tiene características de personalización integradas, incluyendo un cuadro de diálogo de personalización definidas por el sistema, que permiten al usuario insertar, eliminar o reorganizar los botones de la barra de herramientas. La aplicación determina si las características de personalización están disponibles y controla la medida en que el usuario puede personalizar la barra de herramientas.
Puede hacer estas funciones de personalización disponibles para el usuario dándole a la barra de herramientas del estilo CCS_ADJUSTABLE . Las características de personalización permiten al usuario arrastre un botón a una nueva posición o quitar un botón arrastrándolo fuera de la barra de herramientas. Además, el usuario hacer doble clic en la barra de herramientas para mostrar el cuadro de diálogo Personalizar barra de herramientas, que permite al usuario agregar, eliminar o reorganizar los botones de la barra de herramientas. La aplicación puede mostrar el cuadro de diálogo mediante la función de miembro de Personalizar.
El control de la barra de herramientas envía mensajes de notificación a la ventana principal en cada paso en el proceso de personalización. Si el usuario mantiene la tecla Mayús presionada y comienza a arrastrar un botón, la barra de herramientas controla automáticamente la operación de arrastre. La barra de herramientas envía el mensaje de notificación TBN_QUERYDELETE a la ventana principal para determinar si puede eliminarse el botón. La operación de arrastre termina si la ventana primaria devuelve FALSE. Lo contrario, la barra de herramientas de captura de entradas del ratón y espera el usuario suelta el botón del ratón.
Cuando el usuario suelta el botón del ratón, el control de la barra de herramientas determina la ubicación del cursor del ratón. Si el cursor se encuentra fuera de la barra de herramientas, se eliminará el botón. Si el cursor está en otro botón de la barra de herramientas, la barra de herramientas envía el mensaje de notificación TBN_QUERYINSERT a la ventana principal para determinar si se puede insertar un botón a la izquierda del botón determinado. El botón se insertará si la ventana primaria devuelve TRUE; de lo contrario, no lo es. La barra de herramientas envía el mensaje de notificación TBN_TOOLBARCHANGE para indicar el final de la operación de arrastre.
Si el usuario inicia una operación de arrastre sin mantener pulsada la tecla Mayús, el control de barra de herramientas envía el mensaje de notificación TBN_BEGINDRAG a la ventana propietaria. Una aplicación que implementa su propio código al arrastrar el botón puede utilizar este mensaje como una señal para comenzar una operación de arrastre. La barra de herramientas envía el mensaje de notificación TBN_ENDDRAG para indicar el final de la operación de arrastre.
Un control toolbar envía mensajes de notificación cuando el usuario personaliza una barra de herramientas mediante el cuadro de diálogo Personalizar barra de herramientas. La barra de herramientas envía el mensaje de notificación TBN_BEGINADJUST después de que el usuario hace doble clic en la barra de herramientas, pero antes el cuadro de diálogo se crea el cuadro. A continuación, la barra de herramientas comienza a enviar una serie de mensajes de notificación de TBN_QUERYINSERT para determinar si la barra de herramientas permite botones para insertarse. Cuando la ventana primaria devuelve TRUE, la barra de herramientas deja de enviar mensajes de notificación TBN_QUERYINSERT . Si la ventana principal no devolver TRUE para cualquier botón, la barra de herramientas destruye el cuadro de diálogo.
A continuación, el control de la barra de herramientas determina si pueden eliminarse los botones de la barra de herramientas mediante el envío de un mensaje de notificación TBN_QUERYDELETE para cada botón en la barra de herramientas. La ventana primaria devuelve TRUE para indicar que se puede eliminar un botón; de lo contrario, devuelve FALSE. La barra de herramientas agrega todos los botones de barra de herramientas en el cuadro de diálogo, pero grays de aquellos que no se pueden eliminar.
Cuando el control de barra de herramientas necesita obtener información acerca de un botón en el cuadro de diálogo Personalizar barra de herramientas, envía el mensaje de notificación TBN_GETBUTTONINFO , especificando el índice del botón que necesita información y la dirección de una estructura TBNOTIFY . La ventana principal debe llenar la estructura con la información pertinente.
El cuadro de diálogo Personalizar barra de herramientas incluye un botón de ayuda y un botón de restablecer. Cuando el usuario elige el botón de ayuda, el control de la barra de herramientas envía el mensaje de notificación TBN_CUSTHELP . La ventana principal debe responder por mostrar información de ayuda. El cuadro de diálogo envía el mensaje de notificación TBN_RESET cuando el usuario selecciona el botón Reset. Este mensaje indica que la barra de herramientas está a punto de reinicializar el cuadro de diálogo.
Estos mensajes son todos los mensajes WM_NOTIFY y puede manejarse en su ventana propietaria agregando entradas de mapa de mensajes de la siguiente forma al mapa de mensajes de la ventana de su propietario:
ON_NOTIFY ( wNotifyCode, idControl, memberFxn )
wNotifyCode
Código de identificador de mensaje notificación, tales como TBN_BEGINADJUST.
idControl
El identificador del control envío de la notificación.
memberFxn
La función de miembro que se llamará cuando se reciba esta notificación.
Se declararía su función miembro con el siguiente prototipo:
afx_msgvoidmemberFxn()NMHDR * pNotifyStruct,LRESULT*resultado);
Si el controlador de mensajes de notificación devuelve un valor, debe ponerlo en LRESULT apuntado por resultado.
Para cada mensaje, pNotifyStruct apunta a una estructura NMHDR o una estructura TBNOTIFY . Estas estructuras se describen a continuación:
La estructura NMHDR contiene los siguientes miembros:
typedef struct tag&NMHDR {}
HWND hwndFrom; nbsp; / / identificador de control Enviar mensaje
UINT idFrom; / / identificador de control Enviar mensaje
Código UINT; / / código de notificación; Consulte a continuación
} NMHDR
hwndFrom
Identificador de la ventana del control que se envía la notificación. Para convertir este identificador en un puntero de CWnd , utilice CWnd::FromHandle.
idFrom
Identificador del control envío de la notificación.
código
Código de notificación. Este miembro puede ser un valor específico para un tipo de control, tales como TBN_BEGINADJUST o TTN_NEEDTEXT, o puede ser uno de los valores comunes de notificación enumerados a continuación:
La estructura TBNOTIFY contiene los siguientes miembros:
typedef struct {}
&NMHDR hdr; / / información común a todos los mensajes WM_NOTIFY
int iItem; / / índice del botón asociado con notificación
TBBUTTON tbButton; / / info sobre botón asociado con notificación
int cchText; nbsp; / / recuento de caracteres en el texto del botón
LPSTR lpszText; / / dirección del texto del botón
} TBNOTIFY, AHORA * LPTBNOTIFY
hdr
Información común a todos los mensajes WM_NOTIFY.
producto
Índice del botón de notificación.
tbButton
Estructura TBBUTTON que contiene información sobre el botón de barra de herramientas asociado con la notificación.
cchText
Recuento de caracteres en el texto del botón.
lpszText
Puntero a texto de botón.
Las notificaciones que envía la barra de herramientas son los siguientes: