CToolBarCtrl : Traitement des Notifications de personnalisation

Un contrôle commun de la barre d'outils Windows a des fonctionnalités de personnalisation intégrée, y compris une boîte de dialogue Personnalisation définie par le système, qui permet à l'utilisateur d'insérer, supprimer ou réorganiser les boutons de la barre d'outils. L'application détermine si les fonctionnalités de personnalisation sont disponibles et de contrôle de la mesure dans laquelle l'utilisateur peut personnaliser la barre d'outils.

Vous pouvez rendre ces fonctionnalités de personnalisation disponibles pour l'utilisateur en donnant à la barre d'outils du style CCS_ADJUSTABLE . Les fonctionnalités de personnalisation permettent à l'utilisateur de faire glisser un bouton vers une nouvelle position ou pour supprimer un bouton en le faisant glisser hors de la barre d'outils. En outre, l'utilisateur peut double-cliquez sur la barre d'outils pour afficher la boîte de dialogue Personnaliser la barre d'outils, qui permet à l'utilisateur d'ajouter, supprimer et réorganiser les boutons de la barre d'outils. L'application peut afficher la boîte de dialogue à l'aide de la fonction de membre de Personnaliser.

Le contrôle de barre d'outils envoie des messages de notification de la fenêtre parente à chaque étape du processus de personnalisation. Si l'utilisateur maintient la touche Maj enfoncé et commence à faire glisser un bouton de la barre d'outils gère automatiquement l'opération glisser. La barre d'outils envoie le message de notification TBN_QUERYDELETE à la fenêtre parente afin de déterminer si le bouton peut être supprimé. L'opération glisser se termine si la fenêtre parent retourne FALSE. Par ailleurs, la barre d'outils capture l'entrée de la souris et attend que l'utilisateur de relâcher le bouton de la souris.

Lorsque l'utilisateur relâche le bouton de la souris, le contrôle de barre d'outils détermine l'emplacement du curseur de la souris. Si le curseur est à l'extérieur de la barre d'outils, le bouton est supprimé. Si le curseur est sur un autre bouton de la barre d'outils, la barre d'outils envoie le message de notification TBN_QUERYINSERT à la fenêtre parente pour déterminer si un bouton peut être inséré à gauche du bouton. Le bouton est inséré si la fenêtre parent retourne TRUE; par ailleurs, il n'est pas. La barre d'outils envoie le message de notification TBN_TOOLBARCHANGE pour signaler la fin de l'opération glisser.

Si l'utilisateur commence une opération glisser sans en maintenant la touche Maj enfoncée, le contrôle de barre d'outils envoie le message de notification TBN_BEGINDRAG à la fenêtre propriétaire. Une application qui implémente son propre code en faisant glisser le bouton peut utiliser ce message comme un signal pour commencer une opération de glisser. La barre d'outils envoie le message de notification TBN_ENDDRAG pour signaler la fin de l'opération glisser.

Un contrôle de barre d'outils envoie des messages de notification lorsque l'utilisateur personnalise une barre d'outils à l'aide de la boîte de dialogue Personnaliser la barre d'outils. La barre d'outils envoie le message de notification TBN_BEGINADJUST après que l'utilisateur double-clique sur la barre d'outils, mais avant de la boîte de dialogue boîte est créée. Ensuite, la barre d'outils commence à envoyer une série de messages de notification TBN_QUERYINSERT pour déterminer si la barre d'outils permet de boutons à insérer. Lorsque la fenêtre parent retourne TRUE, la barre d'outils cesse d'envoyer des messages de notification TBN_QUERYINSERT . Si la fenêtre parent ne retourne pas TRUE pour un bouton, la barre d'outils détruit la boîte de dialogue.

Ensuite, le contrôle toolbar détermine si des boutons peuvent être supprimés de la barre d'outils en envoyant un message de notification TBN_QUERYDELETE pour chaque bouton dans la barre d'outils. La fenêtre parent retourne TRUE pour indiquer qu'un bouton peut être supprimé ; sinon, elle retourne FALSE. La barre d'outils ajoute tous les boutons de barre d'outils de la boîte de dialogue, mais ceux qui ne peuvent pas être supprimés grays.

Chaque fois que le contrôle de barre d'outils a besoin d'informations sur un bouton dans la boîte de dialogue Personnaliser la barre d'outils, il envoie le message de notification TBN_GETBUTTONINFO en spécifiant l'index du bouton dont il a besoin d'informations et l'adresse d'une structure TBNOTIFY . La fenêtre parent doit remplir la structure avec les informations pertinentes.

La boîte de dialogue Personnaliser la barre d'outils comprend un bouton d'aide et d'un bouton de réinitialisation. Lorsque l'utilisateur choisit le bouton aide, le contrôle de barre d'outils envoie le message de notification TBN_CUSTHELP . La fenêtre parente doit répondre en affichant des informations d'aide. La boîte de dialogue envoie le message de notification TBN_RESET lorsque l'utilisateur sélectionne le bouton de réinitialisation. Ce message indique que la barre d'outils est sur le point de réinitialiser la boîte de dialogue.

Ces messages sont tous les messages WM_NOTIFY , et ils peuvent être manipulés dans votre fenêtre propriétaire en ajoutant des entrées de message-carte de la forme suivante de la carte de message de la fenêtre de votre propriétaire:

ON_NOTIFY ( wNotifyCode, idControl, memberFxn )

wNotifyCode

Code identificateur de message notification, comme TBN_BEGINADJUST.

idControl

L'identificateur du contrôle l'envoi de la notification.

memberFxn

La fonction de membre d'être appelé lorsque cette notification est reçue.

Votre fonction membre serait déclarée avec le prototype suivant:

afx_msgvoidmemberFxn()NMHDR * pNotifyStruct,LRESULT*résultat);

Si le gestionnaire de messages de notification retourne une valeur, il faudrait il dans le LRESULT indiqué par résultat.

Pour chaque message, pNotifyStruct signale une structure NMHDR ou une structure TBNOTIFY . Ces structures sont décrites ci-après:

La structure NMHDR contient les membres suivants:

typeDef struct tag&NMHDR {
HWND hwndFrom ; nbsp ; / / handle du contrôle Envoyer message
UINT idFrom; / / identificateur de contrôle Envoyer message
Code de UINT ;  / / code de notification ; voir ci-dessous
} NMHDR

hwndFrom

Handle de fenêtre du contrôle qui envoie la notification. Pour convertir ce handle vers un pointeur de CWnd , utilisez CWnd::FromHandle.

idFrom

Identificateur du contrôle l'envoi de la notification.

code

Code de notification. Ce membre peut être une valeur spécifique à un type de contrôle, tels que TBN_BEGINADJUST ou TTN_NEEDTEXT, ou il peut s'agir des notification des valeurs communes énumérées ci-dessous:

La structure TBNOTIFY contient les membres suivants:

typeDef struct {
&NMHDR hdr ; / / renseignements communs à tous les messages WM_NOTIFY
int iItem ; / / index de bouton associé de notification
TBBUTTON tbButton ; / / info sur le bouton associé à notification
int cchText ; nbsp ;  / / décompte des caractères dans le texte du bouton
LPSTR lpszText; / / adresse du texte du bouton
} TBNOTIFY, FAR * LPTBNOTIFY

hdr

Informations communes à tous les messages WM_NOTIFY.

iItem

Index du bouton associé à la notification.

tbButton

Structure TBBUTTON qui contient des informations sur le bouton de barre d'outils associé à la notification.

cchText

Nombre de caractères dans le texte du bouton.

lpszText

Pointeur de texte du bouton.

Voici les notifications de que la barre d'outils envoie:

Index