テキスト ストア

アプリケーション文字位置 (ACP)

ACP は、テキスト ストリーム内の文字 (文字) の位置であり、テキスト ストリームの先頭からの文字数として表されます。 ACP モデルは 0 から始まるため、テキスト ストリームの最初の文字の ACP は 0 です。 例えば:

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 メソッド を使用して、ITextStoreACP と ITextStoreACPSink メソッド ラップします。

ドキュメント アクセス制御

テキスト ストアは、ドキュメント ロック使用してテキスト ストリームへのアクセスを制御します。 テキスト ストアを読み取ったり変更したりするには、まず、ITextStoreACP::AdviseSink メソッドを呼び出し、アドバイズ シンクへのポインターを渡すことで、ITextStoreACPSink インターフェイスをサポートするアドバイズ シンクをインストールする必要があります。 アドバイズ シンクを使用すると、マネージャーはテキスト ストアのドキュメント ロックを取得し、アプリケーションを介したユーザー入力など、マネージャー以外によってテキスト ストアが変更されたときに通知を受け取ります。 アドバイズ シンクについては、このトピックの後半で説明します。

テキスト ストアを初期化する方法

アプリケーションは、次の手順を実行してテキスト ストアを初期化します。

  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 インターフェイス メソッドを呼び出すことによって提供されます。

ただし、アプリケーションでは、ITextStoreACP インターフェイス メソッドに応答して、ITextStoreACPSink インターフェイス メソッドを呼び出さないでください。 アプリケーションは、テキスト ストアがマネージャー以外 変更された場合にのみ、ITextStoreACPSink インターフェイス メソッドを呼び出す必要があります。

テキスト ストアの内容は、コンポジションと呼ばれる一時的な入力状態で変更できます。

アンカー

コンポジション

ドキュメント ロックの

ITextStoreACPSink の

ITextStoreACP の

ITextStoreAnchor の

ITextStoreAnchorSink

ITfDocumentMgr

ITfThreadMgr を する

ITfThreadMgrEventSink::OnSetFocus

TfClientId の

Microsoft Active Accessibility