Forums: Open Discussion (Thread #30467)

wxRichTextCtrlで日本語インライン変換もどき (2011-09-26 10:03 by senju #59759)

適切な場所が見つからなかったからここに投稿しておきます。

目的:
wxRichTextCtrlで日本語入力しようとすると、入力中の文字がウィンドウの外側にきてあまりイケテない。
現在の文字の大きさ、色で表示しようとするとめんどくさいので、最低限カーソルの場所で変換できるようにする方法。
Windows専用です。

大まかな方法:
wxRichTextCtrlを継承し、MSWWindowProcをオーバーライドし、IMMのメッセージを受信してゴニョゴニョする。

詳細な方法:
1.メンバにIMEへのハンドルを持っておく。
private:
HIMC hIme;
とか。

2.コンストラクタ内でハンドラを初期化
hIme = ImmGetContext(m_hWnd ); // m_hWndは継承元のプロテクトなメンバ

3.WM_IME_STARTCOMPOSITIONを受信したら、IMEに場所を教えてやる。

WXLRESULT Derived::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam){
if(message == WM_IME_STARTCOMPOSITION){
COMPOSITIONFORM form;
ImmGetCompositionWindow(hIme, &form);
wxCaret* c = GetCaret();
wxPoint p = c->GetPosition();
form.ptCurrentPos.x = p.x;
form.ptCurrentPos.y = p.y;
ImmSetCompositionWindow(hIme, &form);

return 0;
}

return wxRichTextCtrl::MSWWindowProc(message, wParam, lParam);
}