共用方式為


文字存放區

應用程式字元位置 (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 Accessibilit y 用戶端,其中管理員會使用 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 Active Accessibility