これまで作ってきたプログラムはMicrosoft IMEやATOKを使って日本語が入力されたときには対応していませんでした。今回はこれに対応させます。ところでRicTextBoxの確定文字列を知るにはどうすればいいのでしょうか。

サンプルでつくったアプリ

WndProcをオーバーライドする必要があるのでRichTextBoxを継承する必要があります。

WM_IME_STARTCOMPOSITIONが来たときに開始点を記憶しておき、WM_IME_ENDCOMPOSITIONが来たときに開始点との差を利用して確定文字列を取得しています。確定文字列を取得するときにカーソルの位置を移動させる必要があるので、ちょっとややこしいことをしています。

独自のイベントを定義することで確定文字列を利用したプログラミングができるようにしています。

では、現在おこなっている複数のRichTextBoxの内容を同期するプログラムにもこれをとりいれてみましょう。