文本存储

应用程序字符位置 (ACP)

ACP 是文本流中字符或字符的位置,该文本流表示为文本流开头的字符数。 由于 ACP 模型从零开始,因此文本流中的第一个字符的 ACP 为零。 例如:

Text Stream  H | e | l | l | o |   | W | o | r | l | d
ACP          0   1   2   3   4   5   6   7   8   9   10

文本存储实现支持 ITextStoreACP 接口的对象,该接口使文本流能够在 ACP 中表示。 ITextStoreACP 接口方法使用文本流的 ACP 范围来修改文本。

Anchor-Based 应用程序

管理器以本机方式使用基于 ACP 的方法来作文本。 但是,基于定位点的方法可用于支持 定位点Microsoft活动 辅助功能客户端,因此管理器使用 ITextStoreAnchorITextStoreAnchorSink 方法包装 ITextStoreACPITextStoreACPSink 方法。

文档访问控制

文本存储通过使用 文档锁来控制对文本流的访问。 若要读取或修改文本存储,管理器必须首先安装一个建议接收器,该接收器支持 ITextStoreACPSink 接口,方法是调用 ITextStoreACP::AdviseSink 方法并将指针传递给建议接收器。 建议接收器使管理器能够获取文本存储上的文档锁,并在文本存储区被管理器以外的内容(例如通过应用程序的用户输入)修改时接收通知。 本主题稍后将讨论建议接收器。

如何初始化文本存储

应用程序通过完成以下步骤来初始化文本存储:

  1. 通过使用指向线程管理器对象的指针调用 CoCreateInstance 函数,基于 ITfThreadMgr 接口创建线程管理器对象。 下面是实现线程管理器对象的代码示例。

    hr = CoCreateInstance (CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, 
                            IID_ITfThreadMgr, (void**)&pThreadMgr);
    
  2. 通过调用 ITfThreadMgr::Activate 方法激活线程管理器对象。 此方法提供指向用于创建上下文对象的 客户端标识符 的指针。 线程管理器用于实现文档管理器对象。

  3. 通过使用指向文档管理器对象的指针调用 ITfThreadMgr::CreateDocumentMgr 方法,基于 ITfDocumentMgr 接口创建文档管理器对象。 文档管理器对象用于实现作为文本存储的上下文对象。

  4. 通过调用 ITfDocumentMgr::CreateContext 方法,从文档管理器创建上下文对象,并使用指向激活线程管理器的客户端标识符的指针。 下面是创建上下文对象的示例:

    hr = pDocumentMgr->CreateContext(m_ClientID, 0, (ITextStoreACP*)this, 
                                    &pContext, pEditCookie);
    
  5. 使用 ITfDocumentMgr::P ush 方法将上下文对象推送到堆栈上。 下面是将上下文对象推送到堆栈的示例:

    hr = pDocumentMgr->Push(pContext);
    

如何修改文本存储

ITfDocumentMgr::P ush 方法调用 ITextStoreACP::AdviseSink,其中包含指向建议接收器接口的指针,以安装新的建议接收器或修改现有的建议接收器。 建议接收器在文本存储被管理器以外的内容(例如用户输入)修改时接收通知。 当输入法获取焦点时,应用程序必须调用 ITfThreadMgrEventSink::OnSetFocus 方法。 通过调用相应的 ITextStoreACPSink 接口方法,向线程管理器提供其他通知。

但是,应用程序不应调用 ITextStoreACPSink 接口方法,以响应 ITextStoreACP 接口方法。 应用程序只有在文本存储被管理器以外的其他内容修改时,才应调用 ITextStoreACPSink 接口方法。

可以使用称为 组合的临时输入状态修改文本存储的内容。

定位点

合成

文档锁

ITextStoreACPSink

ITextStoreACP

ITextStoreAnchor

ITextStoreAnchorSink

ITfDocumentMgr

ITfThreadMgr

ITfThreadMgrEventSink::OnSetFocus

TfClientId

活动辅助功能Microsoft