Procédure pas - à - pas : Disposition des contrôles sur les barres d'outils
Cette rubrique 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 CMFCToolBarButton, classeclasse dérivée de, par exemple CMFCToolBarComboBoxButton, classe, CMFCToolBarEditBoxButton, classe, CMFCDropDownToolbarButton, classe, ou CMFCToolBarMenuButton, classe.
Ajout de contrôles à des barres d'outils
Pour ajouter un contrôle à une barre d'outils, suivez ces étapes :
Réservez un ID de ressource factice pour le bouton dans la ressource parente de barre d'outils.Pour plus d'informations sur la création de boutons à l'aide de l'Éditeur de barres d'outils dans Visual Studio, consultez la rubrique de Éditeur de barres d'outils .
Réservez une image de barre d'outils (icône du bouton) du bouton dans toutes les bitmaps de la barre d'outils parente.
Dans le gestionnaire de messages qui gère le message d' AFX_WM_RESETTOOLBAR , procédez comme suit :
Construisez le contrôle bouton à l'aide de CMFCToolbarButtonclasse dérivée de.
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 contient la copie.
[!REMARQUE]
Si vous personnalisation active dans votre application, vous pouvez devoir redéfinir la barre d'outils à l'aide de le bouton Reset sous l'onglet Barres d'outils de la boîte de dialogue Personnaliser pour consulter le contrôle mis à jour dans votre application après 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 la méthode d' ReplaceButton soit exécutée pendant le 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 des commandes disponibles dans l'application.Par défaut, la boîte de dialogue Personnaliser traite les menus d'application et génère une liste de boutons de barre d'outils standard dans chaque catégorie de menu.Pour conserver une fonctionnalité étendue 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 de CMFCToolBarsCustomizeDialog, classe .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éer une zone de liste déroulante de recherche
Cette section décrit comment créer un contrôle zone de liste déroulante d' Find qui apparaît sur une barre d'outils et contient les chaînes utilisées en dernier.L'utilisateur peut entrer une chaîne dans le contrôle puis appuyez sur la touche d'entrer pour rechercher un document, ou appuyez sur la touche ESCAPE pour retourner le focus au frame principal.Cet exemple suppose que le document est affiché dans CEditView, classe- affichage dérivée.
Création du contrôle de recherche
En premier lieu, créez le contrôle zone de liste déroulante d' Find :
Ajoutez le bouton et ses commandes aux ressources d'application :
Dans les ressources d'application, ajoutez un nouveau bouton avec un ID de commande des ID_EDIT_FIND à une barre d'outils de votre application et à toutes les bitmap associées à la barre d'outils.
Créez un élément de menu avec l'ID de commande des ID_EDIT_FIND
Ajoutez une nouvelle chaîne « recherchez le texte \nFind » à la table de chaînes et lui assigner un ID de commande d' ID_EDIT_FIND_COMBOCet ID sera utilisé comme ID de commande du bouton de zone de liste déroulante d' Find .
[!REMARQUE]
Étant donné qu' ID_EDIT_FIND est une commande standard qui est traitée par CEditView, vous n'êtes pas obligé 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.
Créez une nouvelle classe, CFindComboBox, dérivé de CComboBox, classe.
Dans la classe d' CFindComboBox , substituez la méthode virtuelle d' PreTranslateMessage .Cette méthode permet à la zone de liste déroulante pour gérer le message de WM_KEYDOWN .Si l'utilisateur touche la touche ESCAPE (VK_ESCAPE), retournez le focus sur la fenêtre frame principale.Si l'utilisateur enfonce la touche ENTRÉE (VK_ENTER), publiez dans la fenêtre frame principale un message d' WM_COMMAND contenant l'ID de commande des ID_EDIT_FIND_COMBO
Créez une classe pour le bouton de zone de liste déroulante d' Find , dérivée de CMFCToolBarComboBoxButton, classe.Dans cet exemple, il est nommé CFindComboButton.
Le constructeur d' CMFCToolbarComboBoxButton prend trois paramètres : l'ID de commande du bouton, de l'index d'images de bouton, du style et de la zone de liste déroulante.Définissez ces paramètres comme suit :
Passez ID_EDIT_FIND_COMBO comme ID de commande
Utilisez CCommandManager::GetCmdImage avec ID_EDIT_FIND pour obtenir l'index d'image.
Pour une liste des styles disponibles de la liste déroulante, consultez Styles de zone de liste déroulante.
Dans la classe CFindComboButton, remplacez la méthode CMFCToolbarComboBoxButton::CreateCombo.Maintenant vous devez créer l'objet d' CFindComboButton et retourner un pointeur vers elle.
Utilisez la macro d' IMPLEMENT_SERIAL pour que le bouton modifiable persistant.Le gestionnaire de l'espace de travail automatiquement charge et enregistre l'état du bouton dans le Registre Windows.
Implémentez le gestionnaire d' ID_EDIT_FIND_COMBO dans l'affichage de document.Utilisez CMFCToolBar::GetCommandButtons avec ID_EDIT_FIND_COMBO pour récupérer tous les boutons de zone de liste déroulante d' Find .Il peut exister plusieurs copies d'un bouton avec le même ID de commande en raison de la personnalisation.
Dans le gestionnaire de messages OnFindd'ID_EDIT_FIND, utilisez CMFCToolBar::IsLastCommandFromButton de déterminer si l'ordre de recherche a été envoyée du bouton de zone de liste déroulante d' Find .Si oui, recherchez le texte et ajoutez la chaîne recherchée dans la zone de liste déroulante.
Ajouter le contrôle de recherche dans la barre d'outils principale
Pour ajouter le bouton de zone de liste déroulante dans la barre d'outils, suivez ces étapes :
Implémentez le gestionnaire de messages OnToolbarReset d' AFX_WM_RESETTOOLBAR dans la fenêtre frame principale.
[!REMARQUE]
L'infrastructure 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 déroulante d' Find personnalisés.
Dans le gestionnaire d' AFX_WM_RESETTOOLBAR , examinez l'ID de barre d'outils, c. autrement dit., WPARAM du message d' AFX_WM_RESETTOOLBAR .Si l'ID de barre d'outils est égal à celui de la barre d'outils qui contient le bouton de zone de liste déroulante d' Find , appelez CMFCToolBar::ReplaceButton pour remplacer le bouton d' Find (autrement dit, celui dont l'ID de commande ID_EDIT_FIND) à un objet d' CFindComboButton .
[!REMARQUE]
Vous pouvez construire un objet d' CFindComboBox sur la pile, car ReplaceButton copie l'objet bouton et contient la copie.
Ajouter le contrôle de recherche à la boîte de dialogue personnaliser
Dans le gestionnaire OnViewCustomizede personnalisation, appelez CMFCToolBarsCustomizeDialog::ReplaceButton pour remplacer le bouton d' Find (autrement dit, celui dont l'ID de commande ID_EDIT_FIND) à un objet d' CFindComboButton .
Voir aussi
Référence
CMFCToolBarComboBoxButton, classe
CMFCToolBarsCustomizeDialog, classe