命令的路由演算法
在 Visual Studio 指令會處理多個不同的元件。 命令從最內層的內容中,根據目前的選取範圍,路由傳送至最外層 (也就是全域的) 的內容。 如需詳細資訊,請參閱 命令可用性。
命令解析的順序
命令會通過下列層級的指令內容:
增益集: 環境第一次提供任何增益集所要的命令。
優先順序的指令: 這些命令會藉由使用登錄IVsRegisterPriorityCommandTarget。 它們稱為 Visual Studio,在每個命令,且其註冊的順序呼叫。
內容功能表命令: 指令在哪兒快顯功能表上第一次供係依內容] 功能表中,同時在那之後,典型的路由命令目標。
工具列設定命令目標: 這些命令的目標註冊,當您呼叫SetupToolbar2。 pCmdTarget 參數可以是 null。 如果不是null,則此命令目標,用來更新到您正在設定] 工具列上的任何指令。 如果殼層設定您的工具列,然後將視窗框架,以傳遞pCmdTarget ,讓所有更新的命令在工具列的流經視窗外框,都甚至當它不在焦點。
工具視窗: 工具視窗,通常是實作IVsWindowPane介面,也應該實作IOleCommandTarget介面,讓工具視窗為使用中視窗時,Visual Studio 可以取得命令目標。 不過,如果 [工具] 視窗具有焦點是專案 視窗中,則命令會路由至IVsUIHierarchy介面所選取的項目中的通用父項目。 如果此選項會跨越多個專案,命令會路由至IVsSolution階層架構。 IVsUIHierarchy介面包含QueryStatusCommand和ExecCommand上對應的命令類似的方法IOleCommandTarget介面。
文件] 視窗中: 如果指令有其.vsct 檔案中設定 RouteToDocs 旗標,Visual Studio 尋找文件檢視物件,也就是其中一個命令目標的執行個體IVsWindowPane介面或文件物件的執行個體 (通常是IVsTextLines介面或IVsTextBuffer介面)。 如果文件檢視物件不支援的命令,Visual Studio 會傳送命令到IOleCommandTarget所傳回的介面。 (這是選擇性的介面之文件資料物件)。
目前的階層架構: 目前的階層可擁有作用中的文件視窗或階層中選取專案方案總管] 中。 尋找 Visual Studio IOleCommandTarget最新的或在使用中,階層架構實作的介面。 階層架構應該支援的階層是使用中時,即使文件視窗的專案項目具有焦點時都是有效的命令。 不過,指令套用時才方案總管] 中已焦點必須支援使用IVsUIHierarchy介面和其QueryStatusCommand和ExecCommand方法。
剪下, 複製, 貼上, 刪除, 重新命名, Enter,以及 DoubleClick 命令需要特殊處理。 如需有關如何處理資訊刪除和移除指令中的階層,請參閱IVsHierarchyDeleteHandler介面。
Global: 如果沒有先前所述的內容已處理命令,Visual Studio 會將其傳閱給擁有命令實作 VSPackage IOleCommandTarget介面。 如果 VSPackage 尚未已經載入,並未載入時呼叫 Visual Studio QueryStatus方法。 載入時才 VSPackage Exec ,會呼叫方法。