如何:用于编辑提供上下文

对于编辑器,上下文是活动的,所以仅当编辑器具有焦点或具有焦点时,将焦点移动到工具窗口之前。 可以为编辑器提供上下文通过执行以下操作:

  1. 创建一个上下文包。

  2. 发布上下文包有关选择元素标识符 (SEID)。

  3. 维护该包的上下文。

这些任务按下面的过程中。 有关提供上下文的更多信息,请参见本主题后面 可靠编程

若要创建上下文在编辑器或设计器中请求

  1. 调用 IServiceProvider 接口的 QueryServiceSVsMonitorUserContext services。

    IVsMonitorUserContext 接口的指针返回。

  2. 调用 CreateEmptyContext 方法创建新的上下文或 subcontext 包。

    IVsUserContext 接口的指针返回。

  3. 调用 AddAttribute 方法将属性、查找关键字或关键字 F1 到上下文或 subcontext 包。

  4. 如果创建一个 subcontext 包,请调用 AddSubcontext 方法与父上下文包链接 subcontext 包。

  5. ,当 动态帮助 窗口将更新后,调用 AdviseUpdate 接收通知。

    具有 动态帮助 窗口中调用编辑器中,准备更新从而能够延迟更改上下文时,直到更新发生。 这样做可能提高性能,因为它允许您延迟运行耗时的算法,直到系统空闲时可用。

若要发布上下文中请求。 SEID

  1. 调用 SVsTrackSelectionEx 服务的 QueryService 返回指向 IVsTrackSelectionEx 接口。

  2. 调用 OnElementValueChange,指定 SEID_UserContext 的元素标识符 (elementid 参数) 值指示您通过上下文对全局级别。

  3. 当编辑器或设计器变为活动状态时,在其 IVsTrackSelectionEx 对象的值传播到全局选择。 ,在调用 OnElementValueChange,只需完成这一次每个会话进程,然后存储指向创建的全局上下文。

维护上下文包

  1. 实现 IVsUserContext 确保 动态帮助 窗口通知编辑器或设计器,在更新之前。

    调用 AdviseUpdate 的每个上下文包,在上下文包将创建和实现了 IVsUserContextUpdate后, IDE 调用 UpdateUserContext 通知上下文提供程序上下文包更新。 可以使用此调用更改属性和关键字在上下文包,因此,在所有 subcontext 包,在 动态帮助 窗口更新之前发生。

  2. 调用上下文包的 SetDirty 指示编辑器或设计器具有新的上下文。

    动态帮助 窗口调用 UpdateUserContext 清单时更新,编辑器或设计器可以为父上下文包和所有 subcontext 包相应地更新上下文点。

    备注

    SetDirty 标志自动设置为 true ,只要上下文从上下文包中添加或移除。,如果 SetDirty 标志设置为 true, 动态帮助 窗口仅调用上下文包的 UpdateUserContext 。它将重置为 false 在更新之后。

  3. 调用 AddAttribute 添加上下文的有效上下文集合或 RemoveAttribute 移除上下文。

可靠编程

如果您编写拥有编辑,则必须完成所有三本主题中的过程为编辑器提供上下文。 有关更多信息,请参见 Editor Design Decisions

备注

正确激活编辑器或设计器窗口和确保正确更新命令传送,则必须对该元素的 Show 提交焦点窗口。

SEID 是更改基于选定内容属性的集合。 SEID 信息通过全局选项才可用。 全局选择连接到 IVsTrackSelectionEx 接口触发的事件,并已选择所有的列表 (当前编辑、当前工具窗口,当前层次结构,等等)。

对于编辑器和设计器,上下文可能会发生更改,当光标在单词中移动,经常更新上下文包是低效的。 若要进行更新的更有效,在检测光标移动到编辑器或设计器窗口中后,可以调用 SetDirty。 这允许您持有上下文发生更改,直到有空闲时间,而且 IDE 的上下文服务通知发送给 动态帮助 窗口更新的编辑器或设计器。 此方法使用本主题中的 “维护上下文包”过程。

在提供上下文之后用于在编辑器或设计器中的事件,应提供特定 F1 关键字允许用户编辑器或设计器获得帮助。

请参见

参考

OnElementValueChange

AddAttribute

AdviseUpdate

RemoveAttribute

SetDirty

IVsUserContextUpdate

UpdateUserContext

Show

SVsTrackSelectionEx