次の方法で共有


組成

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

コンポジションの使用例の 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 呼び出すことによってコンポジションを終了できます。