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
はデバッグ用なので不要です。