次の方法で共有


テキスト ストア

アプリケーション文字位置 (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