命令传送算法

在 Visual Studio 命令被许多不同的组件。 命令从最里边的上下文路由,基于当前选择,向最外面的 (也称为全局) 上下文。 有关更多信息,请参见 命令可用性

命令解析顺序

有关通过以下命令级别上下文:

  1. 外接程序:该环境是否存在的所有外接程序首先提供命令。

  2. 优先级排序:使用 IVsRegisterPriorityCommandTarget,这些命令注册。 它们为每个 Visual Studio 命令调用并按注册的顺序调用。

  3. 上下文菜单命令:位于上下文菜单的命令为提供给上下文菜单的命令目标首先提供,稍后,对典型的路由。

  4. 工具栏设置命令目标:,在调用 SetupToolbar2时,这些命令目标注册。 pCmdTarget 参数可以为 null。 如果不是 null,则此命令目标用于更新位于您设置工具栏的所有命令。 如果 shell 设置工具栏,则通过窗架作为 pCmdTarget ,以便到命令的所有更新在工具栏流窗口框架组成,通常,即使它不具有焦点。

  5. 工具窗口:工具窗口,通常实现 IVsWindowPane 接口,还应实现 IOleCommandTarget 接口,以便 Visual Studio 可以获取命令目标,则工具窗口是活动窗口时。 但是,因此,如果具有焦点的工具窗口是 项目 窗口,然后命令路由到为选定项的公用父级的 IVsUIHierarchy 接口。 如果此选择跨多个项目,命令路由到 IVsSolution 层次结构。 IVsUIHierarchy 接口包含类似于 IOleCommandTarget 接口的相应命令的 QueryStatusCommandExecCommand 方法。

  6. 文档窗口:如果命令设置了标志 RouteToDocs 在其 .vsct 文件, Visual Studio 会在文档视图对象的命令目标,是 IVsWindowPane 接口实例或文档对象 (通常 IVsTextLines 接口或 IVsTextBuffer 接口的实例)。 如果文档查看对象不支持命令, Visual Studio 路由命令对返回的 IOleCommandTarget 接口。 (这是一个可选接口。文档数据对象。)

  7. 当前层次结构:当前层次结构可以是拥有有效文档窗口或层次结构。 解决方案资源管理器中选定的项。 Visual Studio 会在当前实现的 IOleCommandTarget 接口,或者激活,层次结构。 该层次结构应该支持有效的命令,只要该层次结构是活动的,因此,即使项目项的文档窗口具有焦点。 但是,将使用 IVsUIHierarchy 接口及其 QueryStatusCommandExecCommand方法,必须支持的命令,仅当 解决方案资源管理器 具有焦点时。

    剪辑复制粘贴删除重命名输入双击 命令需要特殊处理。 有关如何处理 删除 和层次结构中的 移除 命令的信息,请参见 IVsHierarchyDeleteHandler 接口。

  8. 全局:如果命令未由前面提到的上下文处理, Visual Studio 尝试路由到拥有一个命令实现 IOleCommandTarget 接口的 VSPackage。 如果 VSPackage 尚未加载,它不会加载,而 Visual Studio QueryStatus 调用方法时。 ,仅当 Exec 调用方法时, VSPackage 加载。

请参见

其他资源

Command Routing in VSPackages

命令模型