文字存放區

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 Active Accessibility用戶端,讓管理員使用ITextStoreAnchor 和 ITextStoreAnchorSink方法來包裝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 Active Accessibility