Sdílet prostřednictvím


Algoritmus směrování příkazů

V příkazech sady Visual Studio se zpracovává řada různých komponent. Příkazy se směrují z nejvnitřnějšího kontextu, který je založen na aktuálním výběru, do vnějšího kontextu (označovaného také jako globální). Další informace najdete v tématu Dostupnost příkazů.

Pořadí překladu příkazů

Příkazy se předávají prostřednictvím následujících úrovní kontextu příkazu:

  1. Doplňky: Prostředí nejprve nabízí příkaz všem doplňkům, které jsou k dispozici.

  2. Prioritní příkazy: Tyto příkazy jsou registrovány pomocí IVsRegisterPriorityCommandTarget. Volají se pro každý příkaz v sadě Visual Studio a volají se v pořadí, ve kterém byly zaregistrovány.

  3. Příkazy místní nabídky: Příkaz umístěný v místní nabídce se nejprve nabídne cíli příkazu, který je k dispozici v místní nabídce, a potom pro typické směrování.

  4. Panel nástrojů nastavit cíle příkazů: Tyto cíle příkazů jsou registrovány při volání SetupToolbar2. Parametr pCmdTarget může být null. Pokud tomu tak není null, použije se tento cíl příkazu k aktualizaci všech příkazů umístěných na panelu nástrojů, které nastavujete. Pokud prostředí nastavuje panel nástrojů, předá rámeček okna jako pCmdTarget rámec okna, aby všechny aktualizace příkazů na panelu nástrojů procházely rámečkem okna, i když není fokus.

  5. Okno nástrojů: Okna nástrojů, která obvykle implementují IVsWindowPane rozhraní, by také měla implementovat IOleCommandTarget rozhraní, aby Sada Visual Studio získala cíl příkazu, když je okno nástroje aktivním oknem. Pokud je však okno nástroje, které má fokus, okno Projectu , příkaz se přesměruje do IVsUIHierarchy rozhraní, které je společným nadřazeným objektem vybraných položek. Pokud tento výběr zahrnuje více projektů, příkaz se přesměruje do IVsSolution hierarchie. Rozhraní IVsUIHierarchy obsahuje QueryStatusCommand a ExecCommand metody, které jsou analogické s odpovídajícími příkazy v IOleCommandTarget rozhraní.

  6. Okno dokumentu: Pokud má RouteToDocs příkaz v souboru .vsct nastavený příznak, Visual Studio hledá cíl příkazu na objektu zobrazení dokumentu, což je instance IVsWindowPane rozhraní nebo instance objektu dokumentu (obvykle IVsTextLines rozhraní nebo IVsTextBuffer rozhraní). Pokud objekt zobrazení dokumentu příkaz nepodporuje, Visual Studio směruje příkaz do IOleCommandTarget rozhraní, které se vrátí. (Toto je volitelné rozhraní pro datové objekty dokumentu.)

  7. Aktuální hierarchie: Aktuální hierarchie může být projekt, který vlastní okno aktivního dokumentu nebo hierarchii vybranou v Průzkumník řešení. Visual Studio hledá IOleCommandTarget rozhraní implementované v aktuální nebo aktivní hierarchii. Hierarchie by měla podporovat příkazy platné vždy, když je hierarchie aktivní, i když je fokus na okno dokumentu položky projektu. Příkazy, které platí pouze v případě, že Průzkumník řešení má fokus, musí být podporovány pomocí IVsUIHierarchy rozhraní a jeho QueryStatusCommand metodExecCommand.

    Příkazy Vyjmout, Kopírovat, Vložit, Odstranit, Přejmenovat, Enter a DoubleClick vyžadují speciální zpracování. Informace o tom, jak zpracovávat příkazy Odstranit a odebrat v hierarchiích, najdete v IVsHierarchyDeleteHandler rozhraní.

  8. Globální: Pokud příkaz nezpracoval dříve zmíněné kontexty, Visual Studio se pokusí ho směrovat do balíčku VSPackage, který vlastní příkaz, který implementuje IOleCommandTarget rozhraní. Pokud sada VSPackage ještě nebyla načtena, nenačte se při volání QueryStatus metody sadou Visual Studio. Balíček VSPackage se načte pouze při Exec zavolání metody.