組成

コンポジションは、テキスト サービスがアプリケーションとユーザーの両方に対して、入力テキストがまだ変更状態であることを指定できるようにする一時的な入力状態です。 アプリケーションは、コンポジションに関する表示属性情報を取得し、この情報を使用してコンポジション状態をユーザーに表示できます。

コンポジションの使用例の 1 つは、音声入力時です。 ユーザーが話している間に、音声テキスト サービスによってコンポジションが作成されます。 このコンポジションは、音声入力全体が完了するまでそのまま残ります。 セッションが終了すると、音声テキスト サービスによってコンポジションが終了します。

アプリケーションでは、コンポジションの有無を使用して、テキストを表示する方法と、テキストに対して何を処理する必要があるかを判断します。 たとえば、ユーザーが音声エンジンを使用してテキストを入力している場合、アプリケーションは合成テキストに対してスペル チェックや文法チェックを実行しないでください。 合成が終了するまで、テキストは不完全と見なされます。

Text Services

テキスト サービスは、 ITfContextComposition::StartComposition を呼び出してコンポジションを作成します。 テキスト サービスは、必要に応じて、コンポジション イベント通知を受信する ITfCompositionSink オブジェクトを実装できます。 StartComposition は、テキスト サービスが参照を保持し、コンポジションの変更と終了に使用する ITfComposition オブジェクトを返します。 テキスト サービスは、 ITfComposition::EndComposition を呼び出してコンポジションを終了します。

テキスト サービスでコンポジションを作成する場合は、アプリケーションがコンポジションの一部であるテキストを標準テキストとは異なる方法で表示できるように、表示属性もサポートする必要があります。 詳細については、「 表示属性の指定」を参照してください。

アプリケーション

アプリケーションは、 ITfContextOwnerCompositionSink シンクをインストールすることで、コンポジションの作成、変更、終了を監視できます。 コンポジションが開始されると、 ITfContextOwnerCompositionSink::OnStartComposition が呼び出されます。 同様に、コンポジションが変更または終了されると、 ITfContextOwnerCompositionSink::OnUpdateCompositionITfContextOwnerCompositionSink::OnEndComposition がそれぞれ呼び出されます。

コンポジションを使用してドキュメントを更新する一般的な手順を次に示します。

  1. ITextStoreACP::InsertTextAtSelection または ITextStoreAnchor::InsertTextAtSelection は、通常、初期テキストをコンポジションに挿入するために使用されます。
  2. 合成は、InsertTextAtSelection によって返されるテキストの範囲を使用して、ITfContextComposition::StartComposition の呼び出しで開始されます。
  3. 音声やキーボード入力などの新しい入力を受け取ると、アプリケーションは ITextStoreACP::SetText または ITextStoreAnchor::SetText を使用してコンポジションを更新します。
  4. アプリケーションがコンポジションを終了するタイミングであると判断すると、 ITfComposition::EndComposition を呼び出します。

アプリケーションでは、コンポジションがアクティブな場合だけでなく、テキスト サービスによって提供される表示属性を使用して、テキストの表示を常に変更する必要があります。 詳細については、「 表示属性の使用」を参照してください。

必要に応じて、アプリケーションは ITfContextOwnerCompositionServices::TerminateComposition を呼び出してコンポジションを終了できます。