テキスト ストア
アプリケーション文字位置 (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 インターフェイスをサポートするアドバイズ シンクをインストールする必要があります。 アドバイズ シンクを使用すると、マネージャーはテキスト ストアのドキュメント ロックを取得し、アプリケーションを介したユーザー入力など、マネージャー以外によってテキスト ストアが変更されたときに通知を受け取ります。 アドバイズ シンクについては、このトピックの後半で説明します。
テキスト ストアを初期化する方法
アプリケーションは、次の手順を実行してテキスト ストアを初期化します。
CoCreateInstance 関数をスレッド マネージャー オブジェクトへのポインターで呼び出して、ITfThreadMgr インターフェイスに基づいてスレッド マネージャー オブジェクトを作成します。 スレッド マネージャー オブジェクトを実装するコード例を次に示します。
hr = CoCreateInstance (CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, IID_ITfThreadMgr, (void**)&pThreadMgr);
ITfThreadMgr::Activate メソッドを呼び出して、スレッド マネージャー オブジェクトをアクティブ化します。 このメソッドは、コンテキスト オブジェクトの作成に使用 クライアント識別子へのポインターを提供します。 スレッド マネージャーは、ドキュメント マネージャー オブジェクトを実装するために使用されます。
ITfThreadMgr::CreateDocumentMgr メソッドをドキュメント マネージャー オブジェクトへのポインターで呼び出して、ITfDocumentMgr インターフェイスに基づいてドキュメント マネージャー オブジェクトを作成します。 ドキュメント マネージャー オブジェクトは、テキスト ストアであるコンテキスト オブジェクトを実装するために使用されます。
ITfDocumentMgr::CreateContext メソッドを呼び出して、テキスト ストア オブジェクトへのポインターと、スレッド マネージャーをアクティブ化するクライアント識別子へのポインターを使用して、ドキュメント マネージャーからコンテキスト オブジェクトを作成します。 コンテキスト オブジェクトを作成する例を次に示します。
hr = pDocumentMgr->CreateContext(m_ClientID, 0, (ITextStoreACP*)this, &pContext, pEditCookie);
ITfDocumentMgr::P ush メソッドを使用して、コンテキスト オブジェクトをスタックにプッシュします。 コンテキスト オブジェクトをスタックにプッシュする例を次に示します。
hr = pDocumentMgr->Push(pContext);
テキスト ストアを変更する方法
ITfDocumentMgr::P ush メソッドは、新しいアドバイズ シンクをインストールしたり、既存のアドバイズ シンクを変更したりするためのアドバイズ シンク インターフェイスへのポインターを持つ ITextStoreACP::AdviseSink を呼び出します。 アドバイズ シンクは、アプリケーションへのユーザー入力など、マネージャー以外のユーザーによってテキスト ストアが変更されたときに通知を受け取ります。 アプリケーションは、入力メソッドがフォーカスを取得するときに、ITfThreadMgrEventSink::OnSetFocus メソッドを呼び出す必要があります。 スレッド マネージャーへのその他の通知は、適切な ITextStoreACPSink インターフェイス メソッドを呼び出すことによって提供されます。
ただし、アプリケーションでは、ITextStoreACP インターフェイス メソッドに応答して、ITextStoreACPSink インターフェイス メソッドを呼び出さないでください。 アプリケーションは、テキスト ストアがマネージャー以外 変更された場合にのみ、ITextStoreACPSink インターフェイス メソッドを呼び出す必要があります。
テキスト ストアの内容は、コンポジションと呼ばれる一時的な入力状態で変更できます。
関連トピック