编辑上下文
应用
若要创建编辑上下文,应用程序调用 ITfDocumentMgr::CreateContext。
文本服务
文本服务通常使用当前处于活动状态的编辑上下文。 当前活动编辑上下文是活动文档管理器堆栈顶部的编辑上下文。 若要获取当前活动上下文,文本服务会调用 ITfThreadMgr::GetFocus 获取活动文档管理器,然后调用 ITfDocumentMgr::GetTop 以获取堆栈顶部的编辑上下文。
在某些情况下,文本服务需要自己的编辑上下文。 若要创建编辑上下文,文本服务调用 ITfDocumentMgr::CreateContext。
编辑 Cookie
许多方法(如 ITfRange::SetText)需要一种方法来标识具有只读或读/写 文档锁定的编辑上下文。 文档锁是通过 TSF 管理器与应用程序之间的协商获取的。 文本服务无法直接执行此协商。 文本服务只能通过请求具有特定上下文和只读或读/写访问权限的 编辑会话 来获取锁定。 授予编辑会话后,文本服务会提供一个 编辑 cookie,用于标识具有所请求访问权限的编辑上下文。 然后,此 Cookie 将传递给方法,以识别具有适当访问权限的编辑上下文。
ITfDocumentMgr::CreateContext 还会向上下文创建者提供编辑 Cookie。 此 Cookie 具有只读访问权限,并且无法修改访问级别。 事实上,TSF 管理器不会为此编辑 Cookie 协商文档锁。 Cookie 在内部标记为只读,但文档实际上未锁定。 例如,如果上下文创建者使用 ITfDocumentMgr::CreateContext 返回的编辑 cookie 调用 ITfContext::GetSelection,则会导致应用程序的 ITextStoreACP::GetSelection 或 ITextStoreAnchor::GetSelection 调用。 在获取所选内容之前,应用程序将确定文档锁是否存在。 由于不存在锁,因此应用程序将失败并TS_E_NOLOCK。 也就是说,如果应用程序调用具有此 Cookie 的方法,导致调用应用程序的其中一个文本存储方法,则必须在内部处理这种情况,因为应用程序实际上不会有文档锁。
如果上下文创建者需要具有读/写访问权限的编辑 Cookie,则必须建立自己的编辑会话。
相关主题