コンポジション文字列

コンポジション文字列は、コンポジション ウィンドウの現在のテキストです。 これは、IME が最終的な文字に変換するテキストです。 各コンポジション文字列は、1 つ以上の "句" で構成されます。 句は、IME が最後の文字に変換できる文字の最小の組み合わせです。 コンポジション文字列を取得して設定するために、アプリケーションは ImmGetCompositionString 関数と ImmSetCompositionString 関数をそれぞれ呼び出します。

ユーザーがコンポジション ウィンドウにテキストを入力すると、IME はコンポジション文字列の状態を追跡します。 この状態には、属性情報、句情報、入力情報、カーソル位置が含まれます。 アプリケーションは、 ImmGetCompositionString 関数を使用してコンポジションの状態を取得できます。

属性情報は、コンポジション文字列内の文字の状態を指定する 8 ビット値の配列でレンダリングされます。 1 つの句のすべての文字に同じ属性が必要です。 配列には、文字列内のバイトごとに 1 つの値が含まれます。これには、文字列内の 2 バイト文字のリードと 2 バイトごとに 1 バイトが含まれます。 配列内の値ごとに、ビット 0 から 3 は、次の値の 1 つの組み合わせにすることができます。

説明
ATTR_INPUT ユーザーが入力する文字。 IME はまだこの文字を変換していません。
ATTR_INPUT_ERROR IME で変換できないエラー文字。 たとえば、IME では一部の子音をまとめることはできません。
ATTR_TARGET_CONVERTED ユーザーによって選択され、IME によって変換された文字。
ATTR_CONVERTED IME が既に変換した文字。
ATTR_TARGET_NOTCONVERTED 変換される文字。 ユーザーはこの文字を選択しましたが、IME はまだ変換されていません。
ATTR_FIXEDCONVERTED IME で変換されない文字。

 

その他の値はすべて予約されています。 日本語では、ATTR_INPUT属性を持つ変換されていない文字は、ひらがな、カタカナ、または英数字です。 韓国語では、この属性は IME がまだ変換されていないハングル文字を表します。 繁体字中国語と簡体字中国語では、各 IME で一部の範囲内でその文字を制限できます。

コンポジション文字列の状態に含まれる句情報は、コンポジション文字列内の句の位置を指定する 32 ビット値の配列です。 配列には、句ごとに 1 つの値と、完全な文字列の長さを指定する最終的な値が含まれます。 配列内の各値は、文字列の先頭から 句までのオフセットをバイト単位で指定します。 最初の句は常に文字列の先頭から始まるため、最初の値は常に 0 です。 たとえば、文字列に 2 つの句がある場合、句情報には 3 つの値があります。最初の値は 0、2 番目の値は 2 番目の句のオフセット、3 番目の値は文字列の長さです。 Unicode の場合、句の位置は Unicode 文字でカウントされ、文字列の長さは Unicode 文字のサイズです。

コンポジション文字列の状態に含まれる入力情報は、ユーザーがキーボードで入力した文字を表す null で終わる文字列です。

コンポジション文字列の状態に含まれるカーソル位置は、コンポジション文字列内の文字に対するカーソルの位置を示す値です。 値は、文字列の先頭からのオフセット (バイト単位) です。 この値が 0 の場合、カーソルは文字列の最初の文字の直前になります。 値が文字列の長さと等しい場合、カーソルは最後の文字の直後になります。 値が 1 の場合、カーソルは存在しません。 Unicode の場合、位置と長さの両方が Unicode 文字で測定されます。

アプリケーションでは、 ImmSetCompositionString 関数を使用して、コンポジション状態のコンポジション文字列または要素を設定できます。 コンポジション ウィンドウがこれらの変更に基づいて外観を確実に更新できるように、関数はアプリケーションがウィンドウに通知メッセージを送信できるようにします。 コンポジションステータス要素の組み合わせを設定するアプリケーションでは、通常、この関数の最後の呼び出し以外のすべての通知が無効になるため、コンポジション ウィンドウに対して通知メッセージが 1 つだけ生成されます。

最後に、エディット コントロールは、IME によるコンポジション文字列の処理を変更するための 2 つのメッセージをサポートします。 詳細については、「 EM_GETIMESTATUSEM_SETIMESTATUS」を参照してください。 編集コントロールの詳細については、「エディット コントロール」を参照してください。

入力メソッド マネージャーについて