Partager via


Gestion des notifications de personnalisation

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

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

Le contrôle de barre d’outils envoie des messages de notification à la fenêtre parente à chaque étape du processus de personnalisation. Si l’utilisateur conserve la touche Maj vers le bas et commence à faire glisser un bouton, la barre d’outils gère automatiquement l’opération de glissement. La barre d’outils envoie le message de notification TBN_QUERYDELETE à la fenêtre parente pour déterminer si le bouton peut être supprimé. L’opération de glissement se termine si la fenêtre parente retourne FALSE. Sinon, la barre d’outils capture l’entrée de la souris et attend que l’utilisateur relâche 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 se trouve en dehors de la barre d’outils, le bouton est supprimé. Si le curseur se trouve sur un autre bouton de 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 donné. Le bouton est inséré si la fenêtre parente retourne TRUE ; sinon, ce n’est pas le cas. La barre d’outils envoie le message de notification TBN_TOOLBARCHANGE pour signaler la fin de l’opération de glisser.

Si l’utilisateur commence une opération de glisser sans conserver 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 de glisser-bouton peut utiliser ce message comme 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 de glissement.

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 la création de la boîte de dialogue. Ensuite, la barre d’outils commence à envoyer une série de messages de notification TBN_QUERYINSERT pour déterminer si la barre d’outils autorise l’insertion de boutons. Lorsque la fenêtre parente retourne TRUE, la barre d’outils cesse d’envoyer des messages de notification TBN_QUERYINSERT . Si la fenêtre parente ne retourne pas TRUE pour un bouton, la barre d’outils détruit la boîte de dialogue.

Ensuite, le contrôle de barre d’outils 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 de la barre d’outils. La fenêtre parente 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 à la boîte de dialogue, mais grise ceux qui peuvent ne pas être supprimés.

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 pour lequel il a besoin d’informations et l’adresse d’une structure TBNOTIFY . La fenêtre parente doit remplir la structure avec les informations pertinentes.

La boîte de dialogue Personnaliser la barre d’outils inclut un bouton Aide et un bouton Réinitialiser. 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 Réinitialiser. Ce message signale que la barre d’outils est sur le point de réinitialiser la boîte de dialogue.

Ces messages sont tous WM_NOTIFY messages et peuvent être gérés dans votre fenêtre propriétaire en ajoutant des entrées de mappage de messages du formulaire suivant à la carte des messages de votre fenêtre propriétaire :

ON_NOTIFY( wNotifyCode, idControl, memberFxn )
  • wNotifyCode

    Code d’identificateur de message de notification, tel que TBN_BEGINADJUST.

  • idControl

    Identificateur du contrôle envoyant la notification.

  • memberFxn

    Fonction membre à appeler lorsque cette notification est reçue.

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

afx_msg void memberFxn( NMHDR * pNotifyStruct, LRESULT * result );

Si le gestionnaire de messages de notification retourne une valeur, elle doit la placer dans le LRESULT pointé par résultat.

Pour chaque message, pNotifyStruct pointe vers une structure NMHDR ou une structure TBNOTIFY . Ces structures sont décrites ci-dessous :

La structure NMHDR contient les membres suivants :

typedef struct tagNMHDR {
    HWND hwndFrom;  // handle of control sending message
    UINT idFrom;// identifier of control sending message
    UINT code;  // notification code; see below
} NMHDR;
  • hwndFrom

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

  • idFrom

    Identificateur du contrôle envoyant la notification.

  • code

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

    • NM_CLICK L’utilisateur a cliqué sur le bouton gauche de la souris dans le contrôle.

    • NM_DBLCLK L’utilisateur a double-cliqué sur le bouton gauche de la souris dans le contrôle.

    • NM_KILLFOCUS Le contrôle a perdu le focus d’entrée.

    • NM_OUTOFMEMORY Le contrôle n’a pas pu effectuer une opération, car il n’y a pas suffisamment de mémoire disponible.

    • NM_RCLICK L’utilisateur a cliqué sur le bouton droit de la souris dans le contrôle.

    • NM_RDBLCLK L’utilisateur a double-cliqué sur le bouton droit de la souris dans le contrôle.

    • NM_RETURN Le contrôle a le focus d’entrée et l’utilisateur a appuyé sur la touche Entrée.

    • NM_SETFOCUS Le contrôle a reçu le focus d’entrée.

La structure TBNOTIFY contient les membres suivants :

typedef struct {
    NMHDR hdr; // information common to all WM_NOTIFY messages
    int iItem; // index of button associated with notification
    TBBUTTON tbButton; // info about button associated withnotification
    int cchText;   // count of characters in button text
    LPSTR lpszText;// address of button text
} 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 vers le texte du bouton.

Les notifications envoyées par la barre d’outils sont les suivantes :

  • TBN_BEGINADJUST

    Envoyé lorsque l’utilisateur commence à personnaliser un contrôle de barre d’outils. Le pointeur pointe vers une structure NMHDR qui contient des informations sur la notification. Le gestionnaire n’a pas besoin de retourner une valeur spécifique.

  • TBN_BEGINDRAG

    Envoyé lorsque l’utilisateur commence à faire glisser un bouton dans un contrôle de barre d’outils. Le pointeur pointe vers une structure TBNOTIFY . Le membre iItem contient l’index de base zéro du bouton déplacé. Le gestionnaire n’a pas besoin de retourner une valeur spécifique.

  • TBN_CUSTHELP

    Envoyé lorsque l’utilisateur choisit le bouton Aide dans la boîte de dialogue Personnaliser la barre d’outils. Aucune valeur renvoyée. Le pointeur pointe vers une structure NMHDR qui contient des informations sur le message de notification. Le gestionnaire n’a pas besoin de retourner une valeur spécifique.

  • TBN_ENDADJUST

    Envoyé lorsque l’utilisateur cesse de personnaliser un contrôle de barre d’outils. Le pointeur pointe vers une structure NMHDR qui contient des informations sur le message de notification. Le gestionnaire n’a pas besoin de retourner une valeur spécifique.

  • TBN_ENDDRAG

    Envoyé lorsque l’utilisateur cesse de faire glisser un bouton dans un contrôle de barre d’outils. Le pointeur pointe vers une structure TBNOTIFY . Le membre iItem contient l’index de base zéro du bouton déplacé. Le gestionnaire n’a pas besoin de retourner une valeur spécifique.

  • TBN_GETBUTTONINFO

    Envoyé lorsque l’utilisateur personnalise un contrôle de barre d’outils. La barre d’outils utilise ce message de notification pour récupérer les informations nécessaires à la boîte de dialogue Personnaliser la barre d’outils. Le pointeur pointe vers une structure TBNOTIFY . Le membre iItem spécifie l’index de base zéro d’un bouton. Les membres pszText et cchText spécifient l’adresse et la longueur, en caractères, du texte du bouton actif. Une application doit remplir la structure avec des informations sur le bouton. Retourne TRUE si les informations de bouton ont été copiées dans la structure ou FALSE dans le cas contraire.

  • TBN_QUERYDELETE

    Envoyé pendant que l’utilisateur personnalise une barre d’outils pour déterminer si un bouton peut être supprimé d’un contrôle de barre d’outils. Le pointeur pointe vers une structure TBNOTIFY . Le membre iItem contient l’index de base zéro du bouton à supprimer. Retourne TRUE pour autoriser la suppression du bouton ou FALSE pour empêcher la suppression du bouton.

  • TBN_QUERYINSERT

    Envoyé pendant que l’utilisateur personnalise un contrôle de barre d’outils pour déterminer si un bouton peut être inséré à gauche du bouton donné. Le pointeur pointe vers une structure TBNOTIFY . Le membre iItem contient l’index de base zéro du bouton à insérer. Retourne TRUE pour autoriser l’insertion d’un bouton devant le bouton donné ou FALSE pour empêcher l’insertion du bouton.

  • TBN_RESET

    Envoyé lorsque l’utilisateur réinitialise le contenu de la boîte de dialogue Personnaliser la barre d’outils. Le pointeur pointe vers une structure NMHDR qui contient des informations sur le message de notification. Le gestionnaire n’a pas besoin de retourner une valeur spécifique.

  • TBN_TOOLBARCHANGE

    Envoyé une fois que l’utilisateur a personnalisé un contrôle de barre d’outils. Le pointeur pointe vers une structure NMHDR qui contient des informations sur le message de notification. Le gestionnaire n’a pas besoin de retourner une valeur spécifique.

Voir aussi

Utilisation de CToolBarCtrl
Contrôles