Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 uneCMFCToolBarButton classe dérivée de classe, 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, procédez comme suit :
Réservez un ID de ressource factice pour le bouton dans la ressource de 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 .
Réservez une image de barre d’outils (icône de bouton) pour le bouton dans toutes les bitmaps de la barre d’outils parente.
Dans le gestionnaire de messages qui traite le
AFX_WM_RESETTOOLBARmessage, procédez comme suit :Construisez le contrôle button à l’aide d’une
CMFCToolbarButtonclasse dérivée.Remplacez le bouton factice par le nouveau contrôle à l’aide
CMFCToolBar::ReplaceButtonde . Vous pouvez construire l’objet bouton sur la pile, carReplaceButtoncopie l’objet bouton et gère 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 enregistré dans le Registre Windows et les informations de Registre sont chargées et appliquées une fois la méthode exécutée au démarrage de l’application ReplaceButton .
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 CMFCToolBarsCustomizeDialog classe Class . 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 taper une chaîne dans le contrôle, puis appuyer sur la touche Entrée pour rechercher un document, ou appuyer sur la touche d’échappement pour renvoyer le focus au cadre principal. Cet exemple suppose que le document est affiché dans une CEditViewvue dérivée de la classe.
Création du contrôle De recherche
Tout d’abord, créez le contrôle de zone de liste modifiable Rechercher :
Ajoutez le bouton et ses commandes aux ressources de l’application :
Dans les ressources de l’application, ajoutez un nouveau bouton avec un ID de
ID_EDIT_FINDcommande à une barre d’outils de votre application et à toutes les bitmaps associées à la barre d’outils.Créez un élément de menu avec l’ID de
ID_EDIT_FINDcommande.Ajoutez une nouvelle chaîne à la table de chaînes
"Find the text\nFind"et affectez-la à un ID deID_EDIT_FIND_COMBOcommande. Cet ID sera utilisé comme ID de commande du bouton Zone de liste déroulante Rechercher .Remarque
Étant donné qu’il
ID_EDIT_FINDs’agit d’une commande standard traitée parCEditView, 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 commandeID_EDIT_FIND_COMBO.
Créez une classe,
CFindComboBoxdérivée deCComboBoxla classe.Dans la
CFindComboBoxclasse, remplacez laPreTranslateMessageméthode virtuelle. Cette méthode permet à la zone de liste déroulante de traiter leWM_KEYDOWNmessage. Si l’utilisateur atteint la touche d’échappement (VK_ESCAPE), retournez le focus sur la fenêtre du cadre principal. Si l’utilisateur atteint la touche Entrée (VK_ENTER), publiez dans la fenêtre du cadre principal unWM_COMMANDmessage qui contient l’ID deID_EDIT_FIND_COMBOcommande.Créez une classe pour le bouton de zone de liste modifiable Rechercher , dérivé de
CMFCToolBarComboBoxButtonla classe. Dans cet exemple, il est nomméCFindComboButton.Le constructeur de
CMFCToolbarComboBoxButtonprend trois paramètres : l’ID de commande du bouton, l’index de l’image du bouton et le style de la zone de liste modifiable. Définissez ces paramètres comme suit :Transmettez l’ID
ID_EDIT_FIND_COMBOde commande.Utilisez-la
CCommandManager::GetCmdImageID_EDIT_FINDpour obtenir l’index d’image.Pour obtenir la liste des styles de zone de liste modifiable disponibles, consultez Combo-Box Styles.
Dans la
CFindComboButtonclasse, remplacez laCMFCToolbarComboBoxButton::CreateCombométhode. Ici, vous devez créer l’objetCFindComboButtonet renvoyer un pointeur vers celui-ci.Utilisez la
IMPLEMENT_SERIALmacro pour rendre le bouton combiné persistant. Le gestionnaire d’espace de travail charge et enregistre automatiquement l’état du bouton dans le Registre Windows.Implémentez le
ID_EDIT_FIND_COMBOgestionnaire dans votre affichage de document. Utilisez cetteID_EDIT_FIND_COMBOoptionCMFCToolBar::GetCommandButtonspour récupérer tous les boutons de zone de liste modifiable Rechercher. Il peut y avoir plusieurs copies d’un bouton avec le même ID de commande en raison de la personnalisation.Dans le gestionnaire de
ID_EDIT_FINDOnFindmessages, utilisez cette optionCMFCToolBar::IsLastCommandFromButtonpour déterminer si la commande find a été envoyée à partir du bouton Rechercher dans la zone de liste déroulante. Dans ce cas, recherchez le texte et ajoutez la chaîne de recherche à la zone de liste déroulante.
Ajout du contrôle De recherche à la barre d’outils principale
Pour ajouter le bouton de zone de liste modifiable à la barre d’outils, procédez comme suit :
Implémentez le
AFX_WM_RESETTOOLBARgestionnaire deOnToolbarResetmessages dans la fenêtre frame principale.Remarque
L’infrastructure envoie ce message à la fenêtre de trame principale lorsqu’une barre d’outils est initialisée au démarrage de l’application ou lorsqu’une barre d’outils est réinitialisée lors de 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.
Dans le
AFX_WM_RESETTOOLBARgestionnaire, examinez l’ID de barre d’outils, autrement dit, leWPARAMAFX_WM_RESETTOOLBARmessage. 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 , appelezCMFCToolBar::ReplaceButtonpour remplacer le bouton Rechercher (autrement dit, le bouton par l’IDID_EDIT_FINDde commande) par unCFindComboButtonobjet.Remarque
Vous pouvez construire un
CFindComboBoxobjet sur la pile, carReplaceButtoncopie l’objet bouton et gère la copie.
Ajout du contrôle Rechercher à 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