2012年11月01日

Windows の RichText

 wxWidgets のアプリで、テキストビューのフォントを等幅に変えてみた。Mac の方は問題なくできたのだが、Windows の方がなかなかうまくいかない。表示されたテキストのフォントは問題なく変更できたのに、新しく追加するテキストのフォントがデフォルトに戻ってしまう。wxWidgets のドキュメントには wxTextCtrl::SetDefaultStyle() でできると書いてあるのに。wxWidgets のメソッドをいろいろ試したがダメだったので、これは Windows のネイティブ API を叩くしかないな、と覚悟を決めて、wxWidgets のソースを読んでネットで情報収集した。結局、wxTextCtrl の作成直後に次のコードを入れることで解決した。

#if defined(__WXMSW__) { HWND hwnd = (HWND)(textCtrl->GetHWND()); DWORD dwOptions; LPARAM result; /* Disable dual language mode */ dwOptions = SendMessage(hwnd, EM_GETLANGOPTIONS, 0, 0); dwOptions &= ~0x02; /* 0x02 = IMF_AUTOFONT */ result = SendMessage(hwnd, EM_SETLANGOPTIONS, 0, (LPARAM)dwOptions); printf("%ld\n", (long)result); } #endif

 たぶん英語環境では出てこない症状なんだろうなあ…

追記。最後の printf はデバッグ用なので不要です。

Posted at 2012年11月01日 00:17:27
email.png