C#でIMEの入力を受けるユーザーコントロールの作成
時々作りたくなるのですが、毎回忘れて調べるのに苦労する、C# で IME の入力を受けるコントロールの作り方メモです。
一部余分なコードや余分なインポートがありますが、ご勘弁を。以下のことをしておけば最低限動くようです。
- WndProc をオーバーライド
- WM_IME_SETCONTEXT メッセージで
- ImmCreateContext を呼んでコンテキストを作り、ImmAssociateContextEx でハンドルと結びつける
- WM_IME_STARTCOMPOSITION メッセージで
- ImmSetCompositionWindow を使い候補ウィンドウの位置を設定する
- 解放のタイミング(Dispose?)で
- ImmReleaseContext を呼んで解放
入力文字は、KeyPress イベントで一文字ずつ入ってきます。