Udostępnij za pośrednictwem


Dodawanie kontrolera menu do paska narzędzi

Ten przewodnik opiera się na przewodniku Dodawanie paska narzędzi do okna narzędzi i pokazuje, jak dodać kontroler menu do paska narzędzi. Kroki przedstawione tutaj można również zastosować do paska narzędzi utworzonego w przewodniku Dodawanie paska narzędzi .

Kontroler menu to kontrolka podziału. Po lewej stronie kontrolera menu jest wyświetlane ostatnio używane polecenie i można go uruchomić, klikając go. Po prawej stronie kontrolera menu znajduje się strzałka, która po kliknięciu otwiera listę dodatkowych poleceń. Po kliknięciu polecenia na liście polecenie zostanie uruchomione i zastąpi polecenie po lewej stronie kontrolera menu. W ten sposób kontroler menu działa jak przycisk polecenia, który zawsze wyświetla ostatnio używane polecenie z listy.

Kontrolery menu mogą być wyświetlane w menu, ale są one najczęściej używane na paskach narzędzi.

Tworzenie kontrolera menu

  1. Postępuj zgodnie z procedurami opisanymi w temacie Dodawanie paska narzędzi do okna narzędzi, aby utworzyć okno narzędzi z paskiem narzędzi.

  2. W pliku TWTestCommandPackage.vsct przejdź do sekcji Symbole. W elemplecie GuidSymbol o nazwie guidTWTestCommandPackageCmdSet zadeklaruj kontroler menu, grupę kontrolera menu i trzy elementy menu.

    <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. W sekcji Menu po ostatnim wpisie menu zdefiniuj kontroler menu jako 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>
    

    Flagi TextChanges i TextIsAnchorCommand muszą być dołączone, aby umożliwić kontrolerowi menu odzwierciedlenie ostatniego wybranego polecenia.

  4. W sekcji Grupy po ostatnim wpisie grupy dodaj grupę kontrolera menu.

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

    Ustawiając kontroler menu jako element nadrzędny, wszystkie polecenia umieszczone w tej grupie są wyświetlane na kontrolerze menu. Atrybut priority zostanie pominięty, który ustawia go na wartość domyślną 0, ponieważ jest jedyną grupą na kontrolerze menu.

  5. W sekcji Przyciski po ostatnim wpisie przycisku dodaj element Przycisk dla każdego elementu menu.

    <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. W tym momencie możesz przyjrzeć się kontrolerowi menu. Skompiluj projekt i rozpocznij debugowanie. Powinno zostać wyświetlone wystąpienie eksperymentalne.

    1. W menu Widok/Inne okna otwórz narzędzie testoweWindow.

    2. Kontroler menu jest wyświetlany na pasku narzędzi w oknie narzędzi.

    3. Kliknij strzałkę po prawej stronie kontrolera menu, aby wyświetlić trzy możliwe polecenia.

      Zwróć uwagę, że po kliknięciu polecenia tytuł kontrolera menu zmieni się w celu wyświetlenia tego polecenia. W następnej sekcji dodamy kod, aby aktywować te polecenia.

Implementowanie poleceń kontrolera menu

  1. W pliku TWTestCommandPackageGuids.cs dodaj identyfikatory poleceń dla trzech elementów menu po istniejących identyfikatorach poleceń.

    public const int cmdidMCItem1 = 0x130;
    public const int cmdidMCItem2 = 0x131;
    public const int cmdidMCItem3 = 0x132;
    
  2. W pliku TWTestCommand.cs dodaj następujący kod w górnej TWTestCommand części klasy.

    private int currentMCCommand; // The currently selected menu controller command
    
  3. W konstruktorze TWTestCommand po ostatnim wywołaniu AddCommand metody dodaj kod do kierowania zdarzeń dla każdego polecenia za pomocą tych samych procedur obsługi.

    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. Dodaj procedurę obsługi zdarzeń do klasy TWTestCommand , aby oznaczyć wybrane polecenie jako zaznaczone.

    private void OnMCItemQueryStatus(object sender, EventArgs e)
    {
        OleMenuCommand mc = sender as OleMenuCommand;
        if (null != mc)
        {
            mc.Checked = (mc.CommandID.ID == this.currentMCCommand);
        }
    }
    
  5. Dodaj program obsługi zdarzeń, który wyświetla komunikatBox, gdy użytkownik wybierze polecenie na kontrolerze menu:

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

Testowanie kontrolera menu

  1. Skompiluj projekt i rozpocznij debugowanie. Powinno zostać wyświetlone wystąpienie eksperymentalne.

  2. Otwórz narzędzie testoweWindow w menu Widok/Inne systemu Windows.

    Kontroler menu jest wyświetlany na pasku narzędzi w oknie narzędzi i wyświetla element MC 1.

  3. Kliknij przycisk kontrolera menu po lewej stronie strzałki.

    Powinny zostać wyświetlone trzy elementy, z których pierwsza jest zaznaczona i ma pole wyróżnienia wokół jego ikony. Kliknij pozycję MC Item 3.

    Zostanie wyświetlone okno dialogowe z komunikatem Wybrana pozycja kontrolera menu 3. Zwróć uwagę, że komunikat odpowiada tekstowi na przycisku kontrolera menu. Przycisk kontrolera menu wyświetla teraz element MC 3.