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
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.
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" />
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
iTextIsAnchorCommand
muszą być dołączone, aby umożliwić kontrolerowi menu odzwierciedlenie ostatniego wybranego polecenia.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.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>
W tym momencie możesz przyjrzeć się kontrolerowi menu. Skompiluj projekt i rozpocznij debugowanie. Powinno zostać wyświetlone wystąpienie eksperymentalne.
W menu Widok/Inne okna otwórz narzędzie testoweWindow.
Kontroler menu jest wyświetlany na pasku narzędzi w oknie narzędzi.
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
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;
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
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; } }
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); } }
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
Skompiluj projekt i rozpocznij debugowanie. Powinno zostać wyświetlone wystąpienie eksperymentalne.
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.
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.