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í vyhodnocení 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 ve Visual Studio a to 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 shell nastavuje váš panel nástrojů, předá okno rámečku jako pCmdTarget tak, aby všechny aktualizace příkazů na vašem panelu nástrojů procházely oknem rámečku, i když není v popředí.

  5. Okno nástrojů: Okna nástrojů, která obvykle implementují rozhraní IVsWindowPane, by také měla implementovat rozhraní IOleCommandTarget, aby Visual Studio získalo příkazový cíl, když je okno nástroje aktivním oknem. Pokud je však okno nástroje, které má fokus, okno Projekt, příkaz se přesměruje na IVsUIHierarchy rozhraní, které je společným rodičem 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 je u příkazu v souboru .vsct nastaven příznak RouteToDocs, Visual Studio hledá cíl příkazu na objektu zobrazení dokumentu, který je buď instancí IVsWindowPane rozhraní, nebo instancí 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é je vráceno. (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íku řešení. Visual Studio hledá rozhraní IOleCommandTarget implementované v aktuální, neboli aktivní hierarchii. Hierarchie by měla podporovat příkazy platné vždy, když je hierarchie aktivní, i když je zaostřeno na okno dokumentu položky projektu. Příkazy, které platí pouze tehdy, když má Průzkumník řešení fokus, musí být podporovány pomocí IVsUIHierarchy rozhraní a jeho QueryStatusCommand a ExecCommand metod.

    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 dříve zmíněné kontexty příkaz nezpracovaly, Visual Studio se pokusí směrovat příkaz do balíčku VSPackage, který vlastní příkaz implementující rozhraní IOleCommandTarget. Pokud sada VSPackage ještě nebyla načtena, nenačte se, když Visual Studio zavolá metodu QueryStatus. Balíček VSPackage se načte pouze při zavolání metody Exec.