Ajouter un contrôleur de menu à une barre d’outilsAdd a menu controller to a toolbar

Cette procédure pas à pas s’appuie sur le ajouter 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 Add a toolbar to a tool window walkthrough and shows how to add a menu controller to the tool window toolbar. Les étapes présentées ici peuvent également être appliqués à la barre d’outils qui est créé dans le ajouter une barre d’outils procédure pas à pas.The steps shown here also can be applied to the toolbar that is created in the Add a toolbar walkthrough.

Un contrôleur de menu est un contrôle de fractionnement.A menu controller is a split control. Le côté gauche du contrôleur de menu affiche la commande utilisé en dernier, et vous pouvez l’exécuter en cliquant dessus.The left side of the menu controller shows the last-used command, and you can run it 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 toujours la commande utilisé 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 ils sont souvent utilisées sur les 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 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 par la suite.You can also install the VS SDK later on. Pour plus d’informations, consultez installer le SDK Visual Studio.For more information, see Install the Visual Studio SDK.

Créer un contrôleur de menuCreate a menu controller

  1. Suivez les procédures décrites dans ajouter 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 Add a toolbar to a tool window to create a tool window that has a toolbar.

  2. Dans TWTestCommandPackage.vsct, accédez à la section Symbols.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 inclus afin d’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 en tant que parent, toutes les commandes placées dans ce groupe s’affichent dans le contrôleur de menu.By setting the menu controller as the parent, any commands placed in this group appear in the menu controller. Le priority attribut est omis, ce qui lui affecte la valeur par défaut de 0, car il est le seul groupe sur le contrôleur de menu.The priority attribute is omitted, which sets it to the default value of 0, because it is the only group on the menu controller.

  5. Dans la section boutons, après la dernière entrée de bouton, ajouter un élément Button 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 vue / autres Windows menu, ouvrez 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émenter les commandes de contrôleur de menuImplement the menu controller commands

  1. Dans TWTestCommandPackageGuids.cs, ajoutez des 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 TWTestCommand classe.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 grâce aux gestionnaires 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. Ajouter un gestionnaire d’événements pour le TWTestCommand classe 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 le vue / autres Windows 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 d'entre eux est sélectionné et a une zone de mise en surbrillance 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 que vous avez sélectionné le contrôleur de Menu Item 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 désormais 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