Share via


Procédure pas à pas : placement de contrôles dans les barres d'outils

Cet article explique comment ajouter un bouton de barre d’outils qui contient un contrôle Windows à une barre d’outils. Dans MFC, un bouton de barre d’outils doit être une classe dérivée de la classe CMFCToolBarButton, par exemple CMFCToolBarComboBoxButton, CMFCToolBarEditBoxButton, CMFCDropDownToolbarButton Class ou CMFCToolBarMenuButton, classe.

Ajout de contrôles aux barres d'outils

Pour ajouter un contrôle à une barre d'outils, suivez ces étapes :

  1. Réservez un ID de ressource factice pour le bouton dans la ressource de la barre d'outils parente. Pour plus d’informations sur la création de boutons à l’aide de l’éditeur de barre d’outils dans Visual Studio, consultez l’article De l’Éditeur de barre d’outils.

  2. Réservez une image de barre d'outils (icône bouton) pour le bouton dans toutes les images bitmap de la barre d'outils parente.

  3. Dans le gestionnaire de messages qui traite le AFX_WM_RESETTOOLBAR message, procédez comme suit :

    1. Construisez le contrôle de bouton à l'aide d'une classe dérivée de CMFCToolbarButton.

    2. Remplacez le bouton factice par le nouveau contrôle à l’aide de CMFCToolBar ::ReplaceButton. Vous pouvez construire l'objet bouton sur la pile, car ReplaceButton copie l'objet bouton et conserve la copie.

Remarque

Si vous avez activé la personnalisation dans votre application, vous devrez peut-être réinitialiser la barre d’outils à l’aide du bouton Réinitialiser sous l’onglet Barres d’outils de la boîte de dialogue Personnaliser pour afficher le contrôle mis à jour dans votre application après la recompilation. L'état de la barre d'outils est stocké dans le Registre Windows, et les informations de Registre sont chargées et appliquées après que la méthode ReplaceButton se soit exécutée au démarrage de l'application.

Contrôles de barre d'outils et personnalisation

L’onglet Commandes de la boîte de dialogue Personnaliser contient une liste de commandes disponibles dans l’application. Par défaut, la boîte de dialogue Personnaliser traite les menus de l’application et génère une liste de boutons de barre d’outils standard dans chaque catégorie de menu. Pour conserver les fonctionnalités étendues que les contrôles de barre d’outils fournissent, vous devez remplacer le bouton de barre d’outils standard par le contrôle personnalisé dans la boîte de dialogue Personnaliser .

Lorsque vous activez la personnalisation, vous créez la boîte de dialogue Personnaliser dans le gestionnaire OnViewCustomize de personnalisation à l’aide de la classe CMFCToolBarsCustomizeDialog. Avant d’afficher la boîte de dialogue Personnaliser en appelant CMFCToolBarsCustomizeDialog ::Create, appelez CMFCToolBarsCustomizeDialog ::ReplaceButton pour remplacer le bouton standard par le nouveau contrôle.

Exemple : création d'une zone de liste déroulante Rechercher

Cette section explique comment créer un contrôle de zone de liste modifiable Rechercher qui apparaît dans une barre d’outils et contient des chaînes de recherche utilisées récemment. L'utilisateur peut entrer une chaîne du contrôle puis appuyer sur la touche d'entrée pour rechercher un document, ou appuyer sur la touche Échap pour retourner le focus au frame principal. Cet exemple suppose que le document est affiché dans une vue dérivée de la classe CEditView.

Création du contrôle de recherche (Find)

Tout d’abord, créez le contrôle de zone de liste modifiable Rechercher :

  1. Ajoutez le bouton et ses commandes aux ressources d'application :

    1. Dans les ressources d'application, ajoutez un nouveau bouton avec un ID de commande ID_EDIT_FIND à une barre d'outils de votre application et à toutes les images bitmap associées à la barre d'outils.

    2. Créez un élément de menu avec l’ID de ID_EDIT_FIND commande.

    3. Ajoutez une nouvelle chaîne "Find the text\nFind" à la table de chaînes et assignez-lui un ID de commande ID_EDIT_FIND_COMBO. Cet ID sera utilisé comme ID de commande du bouton Zone de liste déroulante Rechercher .

      Remarque

      Comme ID_EDIT_FIND est une commande standard traitée par CEditView, vous n'êtes pas tenu d'implémenter un gestionnaire spécial pour cette commande. Toutefois, vous devez implémenter un gestionnaire pour la nouvelle commande ID_EDIT_FIND_COMBO.

  2. Créez une classe, CFindComboBoxdérivée de la classe CComboBox.

  3. Dans la classe CFindComboBox, substituez la méthode virtuelle PreTranslateMessage. Cette méthode permet à la zone de liste déroulante de traiter le message WM_KEYDOWN . Si l'utilisateur appuie sur la touche Échap (VK_ESCAPE), retournez le focus sur la fenêtre frame principale. Si l'utilisateur appuie sur la touche Entrée (VK_ENTER), publiez dans la fenêtre frame principale un message WM_COMMAND contenant l'ID de commande ID_EDIT_FIND_COMBO.

  4. Créez une classe pour le bouton de zone de liste déroulante Rechercher , dérivé de la classe CMFCToolBarComboBoxButton. Dans cet exemple, il est nommé CFindComboButton.

  5. Le constructeur de CMFCToolbarComboBoxButton prend trois paramètres : l'ID de commande du bouton, l'index d'image du bouton et le style de la zone de liste déroulante. Définissez ces paramètres comme suit :

    1. Passez ID_EDIT_FIND_COMBO en tant qu'ID de commande.

    2. Utilisez CCommandManager ::GetCmdImage pour ID_EDIT_FIND obtenir l’index d’image.

    3. Pour obtenir la liste des styles de zone de liste modifiable disponibles, consultez Styles de zone de liste modifiable.

  6. Dans la classe CFindComboButton, remplacez la méthode CMFCToolbarComboBoxButton::CreateCombo. Maintenant, vous devez créer l'objet CFindComboButton et retourner un pointeur vers lui.

  7. Utilisez la macro IMPLEMENT_SERIAL pour rendre le bouton combiné persistant. Le gestionnaire de l'espace de travail charge et stocke automatiquement l'état du bouton dans le Registre Windows.

  8. Implémentez le gestionnaire ID_EDIT_FIND_COMBO dans l'affichage de votre document. Utilisez CMFCToolBar ::GetCommandButtons avec ID_EDIT_FIND_COMBO pour récupérer tous les boutons de zone de liste modifiable Rechercher . Il peut exister plusieurs copies d'un bouton avec le même ID de commande suite à la personnalisation.

  9. Dans le ID_EDIT_FIND gestionnaire OnFindde messages, utilisez CMFCToolBar ::IsLastCommandFromButton pour déterminer si la commande find a été envoyée à partir du bouton Rechercher la zone de liste déroulante. Si oui, recherchez le texte et ajoutez la chaîne recherchée dans la zone de liste déroulante.

Ajout du contrôle de recherche (Find) dans la barre d'outils principale

Pour ajouter le bouton de zone de liste déroulante à la barre d'outils, suivez ces étapes :

  1. Implémentez le gestionnaire de messages AFX_WM_RESETTOOLBAROnToolbarReset dans la fenêtre frame principale.

    Remarque

    Le framework envoie le message à la fenêtre frame principale lorsqu'une barre d'outils est initialisée pendant le démarrage de l'application, ou lorsqu'une barre d'outils est réinitialisée pendant la personnalisation. Dans les deux cas, vous devez remplacer le bouton de barre d’outils standard par le bouton de zone de liste modifiable Rechercher personnalisée.

  2. Dans le AFX_WM_RESETTOOLBAR gestionnaire, examinez l’ID de barre d’outils, autrement dit, wpaRAM du message AFX_WM_RESETTOOLBAR. Si l’ID de barre d’outils est égal à celui de la barre d’outils qui contient le bouton Zone de liste déroulante Rechercher , appelez CMFCToolBar ::ReplaceButton pour remplacer le bouton Rechercher (autrement dit, le bouton par l’ID ID_EDIT_FIND) de commande par un CFindComboButton objet.

    Remarque

    Vous pouvez construire un objet CFindComboBox sur la pile, car ReplaceButton copie le bouton et conserve la copie.

Ajout du contrôle de recherche (Find) dans la boîte de dialogue Personnaliser

Dans le gestionnaire OnViewCustomizede personnalisation, appelez CMFCToolBarsCustomizeDialog ::ReplaceButton pour remplacer le bouton Rechercher (autrement dit, le bouton par l’ID ID_EDIT_FINDde commande) par un CFindComboButton objet.

Voir aussi

Graphique hiérarchique
Classes
CMFCToolBar, classe
CMFCToolBarButton, classe
CMFCToolBarComboBoxButton, classe
CMFCToolBarsCustomizeDialog, classe