Ajout d’un contrôleur de Menu à une barre d’outilsAdding a Menu Controller to a Toolbar

Cette procédure pas à pas repose sur le Ajout d’une barre d’outils à une fenêtre outil procédure pas à pas et montre comment ajouter un contrôleur de menu à la barre d’outils de la fenêtre outil.This walkthrough builds on the Adding a Toolbar to a Tool Window walkthrough and shows how to add a menu controller to the tool window toolbar. Les étapes indiquées ici peuvent également être appliqués à la barre d’outils qui est créé dans le Ajout d’une barre d’outils procédure pas à pas.The steps shown here also can be applied to the toolbar that is created in the Adding a Toolbar walkthrough.

Un contrôleur de menu est un contrôle partagé.A menu controller is a split control. La partie gauche du contrôleur de menu affiche la commande utilisés en dernier, et il peut être exécuté en cliquant dessus.The left side of the menu controller shows the last-used command, and it can be run by clicking it. Le côté droit du contrôleur de menu est une flèche qui, lorsque vous cliquez dessus, ouvre une liste de commandes supplémentaires.The right side of the menu controller is an arrow that, when clicked, opens a list of additional commands. Lorsque vous cliquez sur une commande dans la liste, la commande s’exécute, et il remplace la commande sur le côté gauche du contrôleur de menu.When you click a command on the list, the command runs, and it replaces the command on the left side of the menu controller. De cette façon, le contrôleur de menu fonctionne comme un bouton de commande qui affiche la commande utilisés en dernier dans la liste.In this way, the menu controller operates like a command button that always shows the last-used command from a list.

Contrôleurs de menu peuvent apparaître dans les menus, mais elles sont souvent utilisées des barres d’outils.Menu controllers can appear on menus but they are most often used on toolbars.

PrérequisPrerequisites

À partir de Visual Studio 2015, vous n’installez pas le Kit de développement logiciel Visual Studio à partir du centre de téléchargement.Starting in Visual Studio 2015, you do not install the Visual Studio SDK from the download center. Il est inclus comme une fonctionnalité facultative dans le programme d’installation de Visual Studio.It is included as an optional feature in Visual Studio setup. Vous pouvez également installer le kit SDK VS ultérieurement.You can also install the VS SDK later on. Pour plus d’informations, consultez l’installation de Visual Studio SDK.For more information, see Installing the Visual Studio SDK.

Création d’un contrôleur de MenuCreating a Menu Controller

Pour créer un contrôleur de menuTo create a menu controller

  1. Suivez les procédures décrites dans Ajout d’une barre d’outils à une fenêtre outil pour créer une fenêtre outil qui a une barre d’outils.Follow the procedures described in Adding a Toolbar to a Tool Window to create a tool window that has a toolbar.

  2. Dans TWTestCommandPackage.vsct, accédez à la section de symboles.In TWTestCommandPackage.vsct, go to the Symbols section. Dans l’élément GuidSymbol nommé guidTWTestCommandPackageCmdSet, déclarez votre contrôleur de menu, groupe de contrôleurs de menu et trois éléments de menu.In the GuidSymbol element named guidTWTestCommandPackageCmdSet, declare your menu controller, menu controller group, and three menu items.

    <IDSymbol name="TestMenuController" value="0x1300" /><IDSymbol name="TestMenuControllerGroup" value="0x1060" /><IDSymbol name="cmdidMCItem1" value="0x0130" /><IDSymbol name="cmdidMCItem2" value="0x0131" /><IDSymbol name="cmdidMCItem3" value="0x0132" />  
    
  3. Dans la section de Menus, après la dernière entrée de menu, définissez le contrôleur de menu sous forme de menu.In the Menus section, after the last menu entry, define the menu controller as a menu.

    <Menu guid="guidTWTestCommandPackageCmdSet" id="TestMenuController" priority="0x0100" type="MenuController">  
        <Parent guid="guidTWTestCommandPackageCmdSet" id="TWToolbarGroup" />  
        <CommandFlag>IconAndText</CommandFlag>  
        <CommandFlag>TextChanges</CommandFlag>  
        <CommandFlag>TextIsAnchorCommand</CommandFlag>  
        <Strings>  
            <ButtonText>Test Menu Controller</ButtonText>  
            <CommandName>Test Menu Controller</CommandName>  
        </Strings>  
    </Menu>  
    

    Le TextChanges et TextIsAnchorCommand indicateurs doivent être incluses pour activer le contrôleur de menu afin de refléter la dernière commande sélectionnée.The TextChanges and TextIsAnchorCommand flags must be included to enable the menu controller to reflect the last selected command.

  4. Dans les groupes de section, après la dernière entrée de groupe, ajoutez le groupe de contrôleurs de menu.In the Groups section, after the last group entry, add the menu controller group.

    <Group guid="guidTWTestCommandPackageCmdSet" id="TestMenuControllerGroup" priority="0x000">  
        <Parent guid="guidTWTestCommandPackageCmdSet" id="TestMenuController" />  
    </Group>  
    

    En définissant le contrôleur de menu comme parent, toutes les commandes placées dans ce groupe seront affiche dans le contrôleur de menu.By setting the menu controller as the parent, any commands placed in this group will appear in the menu controller. Le priority attribut est omis, qui le définit la valeur par défaut de 0, car il s’agit du groupe uniquement sur le contrôleur de menu.The priority attribute is omitted, which sets it to the default value of 0, because it will be the only group on the menu controller.

  5. Dans la section de boutons, après la dernière entrée de bouton, ajouter un élément de bouton pour chacun de vos éléments de menu.In the Buttons section, after the last button entry, add a Button element for each of your menu items.

    <Button guid="guidTWTestCommandPackageCmdSet" id="cmdidMCItem1" priority="0x0000" type="Button">  
        <Parent guid="guidTWTestCommandPackageCmdSet" id="TestMenuControllerGroup" />  
        <Icon guid="guidImages" id="bmpPic1" />  
        <CommandFlag>IconAndText</CommandFlag>  
        <Strings>  
            <ButtonText>MC Item 1</ButtonText>  
            <CommandName>MC Item 1</CommandName>  
        </Strings>  
    </Button>  
    <Button guid="guidTWTestCommandPackageCmdSet" id="cmdidMCItem2" priority="0x0100" type="Button">  
        <Parent guid="guidTWTestCommandPackageCmdSet" id="TestMenuControllerGroup" />  
        <Icon guid="guidImages" id="bmpPic2" />  
        <CommandFlag>IconAndText</CommandFlag>  
        <Strings>  
            <ButtonText>MC Item 2</ButtonText>  
            <CommandName>MC Item 2</CommandName>  
        </Strings>  
    </Button>  
    <Button guid="guidTWTestCommandPackageCmdSet" id="cmdidMCItem3" priority="0x0200" type="Button">  
        <Parent guid="guidTWTestCommandPackageCmdSet" id="TestMenuControllerGroup" />  
        <Icon guid="guidImages" id="bmpPicSearch" />  
        <CommandFlag>IconAndText</CommandFlag>  
        <Strings>  
            <ButtonText>MC Item 3</ButtonText>  
            <CommandName>MC Item 3</CommandName>  
        </Strings>  
    </Button>  
    
  6. À ce stade, vous pouvez examiner le contrôleur de menu.At this point, you can look at the menu controller. Générez le projet et commencez le débogage.Build the project and start debugging. Vous devez voir l’instance expérimentale.You should see the experimental instance.

    1. Sur le affichage / autres fenêtres menu, ouvrir Test ToolWindow.On the View / Other Windows menu, open Test ToolWindow.

    2. Le contrôleur de menu s’affiche dans la barre d’outils dans la fenêtre outil.The menu controller appears on the toolbar in the tool window.

    3. Cliquez sur la flèche à droite du contrôleur de menu pour voir les trois commandes possibles.Click the arrow on the right-hand side of the menu controller to see the three possible commands.

      Notez que lorsque vous cliquez sur une commande, le titre du contrôleur de menu change pour afficher cette commande.Notice that when you click a command, the title of the menu controller changes to display that command. Dans la section suivante, nous allons ajouter le code pour activer ces commandes.In the next section, we will add the code to activate these commands.

Implémentation des commandes du contrôleur de MenuImplementing the Menu Controller Commands

  1. Dans TWTestCommandPackageGuids.cs, ajouter les ID de commande pour les éléments du trois menu après l’ID de commande existante.In TWTestCommandPackageGuids.cs, add command IDs for your three menu items after the existing command IDs.

    public const int cmdidMCItem1 = 0x130;  
    public const int cmdidMCItem2 = 0x131;  
    public const int cmdidMCItem3 = 0x132;  
    
  2. Dans TWTestCommand.cs, ajoutez le code suivant en haut de la classe TWTestCommand.In TWTestCommand.cs, add the following code at the top of the TWTestCommand class.

    private int currentMCCommand; // The currently selected menu controller command  
    
  3. Dans le constructeur TWTestCommand, après le dernier appel à la AddCommand (méthode), ajoutez le code pour acheminer les événements pour chaque commande via les gestionnaires de mêmes.In the TWTestCommand constructor, after the last call to the AddCommand method, add code to route the events for each command through the same handlers.

    for (int i = TWTestCommandPackageGuids.cmdidMCItem1; i <=  
        TWTestCommandPackageGuids.cmdidMCItem3; i++)  
    {  
        CommandID cmdID = new  
        CommandID(new Guid(TWTestCommandPackageGuids.guidTWTestCommandPackageCmdSet), i);  
        OleMenuCommand mc = new OleMenuCommand(new  
          EventHandler(OnMCItemClicked), cmdID);  
        mc.BeforeQueryStatus += new EventHandler(OnMCItemQueryStatus);  
        commandService.AddCommand(mc);  
        // The first item is, by default, checked.   
        if (TWTestCommandPackageGuids.cmdidMCItem1 == i)  
        {  
            mc.Checked = true;  
            this.currentMCCommand = i;  
        }  
    }  
    
  4. Ajoutez un gestionnaire d’événements à la classe TWTestCommand pour marquer la commande sélectionnée comme activé.Add an event handler to the TWTestCommand class to mark the selected command as checked.

    private void OnMCItemQueryStatus(object sender, EventArgs e)  
    {  
        OleMenuCommand mc = sender as OleMenuCommand;  
        if (null != mc)  
        {  
            mc.Checked = (mc.CommandID.ID == this.currentMCCommand);  
        }  
    }  
    
  5. Ajoutez un gestionnaire d’événements qui affiche un MessageBox lorsque l’utilisateur sélectionne une commande sur le contrôleur de menu :Add an event handler that displays a MessageBox when the user selects a command on the menu controller:

    private void OnMCItemClicked(object sender, EventArgs e)  
    {  
        OleMenuCommand mc = sender as OleMenuCommand;  
        if (null != mc)  
        {  
            string selection;  
            switch (mc.CommandID.ID)  
            {  
                case c.cmdidMCItem1:  
                    selection = "Menu controller Item 1";  
                    break;  
    
                case TWTestCommandPackageGuids.cmdidMCItem2:  
                    selection = "Menu controller Item 2";  
                    break;  
    
                case TWTestCommandPackageGuids.cmdidMCItem3:  
                    selection = "Menu controller Item 3";  
                    break;  
    
                default:  
                    selection = "Unknown command";  
                    break;  
            }  
            this.currentMCCommand = mc.CommandID.ID;  
    
            IVsUIShell uiShell =  
              (IVsUIShell) ServiceProvider.GetService(typeof(SVsUIShell));  
            Guid clsid = Guid.Empty;  
            int result;  
            uiShell.ShowMessageBox(  
                       0,  
                       ref clsid,  
                       "Test Tool Window Toolbar Package",  
                       string.Format(CultureInfo.CurrentCulture,  
                                     "You selected {0}", selection),  
                       string.Empty,  
                       0,  
                       OLEMSGBUTTON.OLEMSGBUTTON_OK,  
                       OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST,  
                       OLEMSGICON.OLEMSGICON_INFO,  
                       0,  
                       out result);  
        }  
    }  
    

Test du contrôleur de MenuTesting the Menu Controller

  1. Générez le projet et commencez le débogage.Build the project and start debugging. Vous devez voir l’instance expérimentale.You should see the experimental instance.

  2. Ouvrez le Test ToolWindow sur la vue / autres fenêtres menu.Open the Test ToolWindow on the View / Other Windows menu.

    Le contrôleur de menu s’affiche dans la barre d’outils dans la fenêtre outil et affiche MC élément 1.The menu controller appears in the toolbar in the tool window and displays MC Item 1.

  3. Cliquez sur le bouton de contrôleur de menu à gauche de la flèche.Click the menu controller button to the left of the arrow.

    Vous devez voir trois éléments, le premier est sélectionné et comprend une zone de sélection autour de son icône.You should see three items, the first of which is selected and has a highlight box around its icon. Cliquez sur MC élément 3.Click MC Item 3.

    Une boîte de dialogue s’affiche avec le message vous avez sélectionné le contrôleur de Menu élément 3.A dialog box appears with the message You selected Menu controller Item 3. Notez que le message correspond au texte sur le bouton de contrôleur de menu.Notice that the message corresponds to the text on the menu controller button. Le bouton de contrôleur de menu affiche maintenant MC élément 3.The menu controller button now displays MC Item 3.

Voir aussiSee Also

Ajout d’une barre d’outils à une fenêtre outil Adding a Toolbar to a Tool Window
Ajout d’une barre d’outilsAdding a Toolbar