テキスト ストア
アプリケーション文字位置 (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 メソッドをラップします。
ドキュメント Access Control
テキスト ストアは、 ドキュメント ロックを使用してテキスト ストリームへのアクセスを制御します。 テキスト ストアの読み取りまたは変更を行うには、まず、 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 インターフェイス メソッドを呼び出す必要があります。
テキスト ストアの内容は、 コンポジションと呼ばれる一時的な入力状態で変更できます。
関連トピック