Přidání kontroleru nabídek na panel nástrojů

Tento názorný postup vychází z panelu nástrojů do okna nástroje a ukazuje, jak přidat ovladač nabídky do panelu nástrojů. Zde uvedené kroky se dají použít také na panel nástrojů vytvořený v návodu Pro přidání panelu nástrojů .

Ovladač nabídky je rozdělený ovládací prvek. Na levé straně kontroleru nabídek se zobrazí poslední použitý příkaz a kliknutím na něj můžete spustit. Pravá strana ovladače nabídky je šipka, která po kliknutí otevře seznam dalších příkazů. Když kliknete na příkaz v seznamu, příkaz se spustí a nahradí příkaz na levé straně kontroleru nabídek. Tímto způsobem ovladač nabídky funguje jako příkazové tlačítko, které vždy zobrazuje poslední použitý příkaz ze seznamu.

Kontrolery nabídek se můžou zobrazovat v nabídkách, ale nejčastěji se používají na panelech nástrojů.

Vytvoření kontroleru nabídek

  1. Postupujte podle postupů popsaných v části Přidat panel nástrojů do okna nástroje a vytvořte okno nástroje s panelem nástrojů.

  2. V souboru TWTestCommandPackage.vsct přejděte do části Symboly. V GuidSymbol element s názvem guidTWTestCommandPackageCmdSet deklarujte řadič nabídky, skupinu kontroleru nabídek a tři položky nabídky.

    <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. V části Nabídky po poslední položce nabídky definujte ovladač nabídky jako nabídku.

    <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>
    

    Aby TextChanges kontroler nabídek odrážel poslední vybraný příkaz, musí být zahrnuty příznaky a TextIsAnchorCommand příznaky.

  4. V části Skupiny za poslední položku skupiny přidejte skupinu kontroleru nabídek.

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

    Nastavením kontroleru nabídky jako nadřazeného objektu se všechny příkazy umístěné v této skupině zobrazí v kontroleru nabídek. Atribut priority se vynechá, který ho nastaví na výchozí hodnotu 0, protože se jedná o jedinou skupinu v kontroleru nabídek.

  5. V části Tlačítka za poslední položku tlačítka přidejte prvek Button pro každou položku nabídky.

    <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. V tuto chvíli se můžete podívat na kontroler nabídek. Sestavte projekt a spusťte ladění. Měla by se zobrazit experimentální instance.

    1. V nabídce View / Other Windows otevřete Test ToolWindow.

    2. Ovladač nabídky se zobrazí na panelu nástrojů v okně nástroje.

    3. Kliknutím na šipku na pravé straně ovladače nabídky zobrazíte tři možné příkazy.

      Všimněte si, že po kliknutí na příkaz se název ovladače nabídky změní tak, aby se zobrazil tento příkaz. V další části přidáme kód pro aktivaci těchto příkazů.

Implementace příkazů kontroleru nabídek

  1. V souboru TWTestCommandPackageGuids.cs přidejte ID příkazů pro tři položky nabídky za existující ID příkazů.

    public const int cmdidMCItem1 = 0x130;
    public const int cmdidMCItem2 = 0x131;
    public const int cmdidMCItem3 = 0x132;
    
  2. V souboru TWTestCommand.cs přidejte do horní části TWTestCommand třídy následující kód.

    private int currentMCCommand; // The currently selected menu controller command
    
  3. V TWTestCommand konstruktoru po posledním volání AddCommand metody přidejte kód pro směrování událostí pro každý příkaz prostřednictvím stejných obslužných rutin.

    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. Přidejte obslužnou rutinu události do třídy TWTestCommand , která označí vybraný příkaz jako zaškrtnutý.

    private void OnMCItemQueryStatus(object sender, EventArgs e)
    {
        OleMenuCommand mc = sender as OleMenuCommand;
        if (null != mc)
        {
            mc.Checked = (mc.CommandID.ID == this.currentMCCommand);
        }
    }
    
  5. Přidejte obslužnou rutinu události, která zobrazí MessageBox, když uživatel vybere příkaz v kontroleru nabídek:

    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);
        }
    }
    

Testování kontroleru nabídek

  1. Sestavte projekt a spusťte ladění. Měla by se zobrazit experimentální instance.

  2. Otevřete testovací nástrojWindow v nabídce Zobrazit / Jiný systém Windows.

    Ovladač nabídky se zobrazí na panelu nástrojů v okně nástroje a zobrazí položku MC 1.

  3. Klikněte na tlačítko ovladače nabídky vlevo od šipky.

    Měly by se zobrazit tři položky, z nichž první je vybrána a obsahuje pole zvýraznění kolem jeho ikony. Klikněte na položku MC 3.

    Zobrazí se dialogové okno se zprávou , že jste vybrali položku kontroleru nabídky 3. Všimněte si, že zpráva odpovídá textu na tlačítku ovladače nabídky. Tlačítko ovladače nabídky teď zobrazuje položku MC 3.