Recently in wxWidgets Category

wxWidgets メモ

| No Comments | No TrackBacks

wxDialog を継承して作ったウィンドウ(ダイアログ)には EVT_PAINT が飛んでこない。モーダルウィンドウが欲しくて wxDialog を継承して作ったんだけど、微妙に困ってしまった(^^ゞ

まぁ、SDK の CreateDialog で作ったときも WM_PAINT は飛んでこないので、Windows の仕様なんだとは思うけど、SDK の場合は Subclass 化してやれば回避(?)は出来るんだけどなぁ。

wxWidgets で Subclass 化ってどうやるんだろう?

結局 EVT_PAINT を利用しないで描画するようにしたけど、どうやるのが正しいんだろうなぁ。

wxWidgets は楽しいです。今、仕事で作るツールはほとんどこのフレームワークを使って作っています。

その中で wxDirPickerCtrl というクラスがあるのですが、ディレクトリ入力用のテキストボックスと参照ボタンがセットになっているのでものすごく便利です。

ところが普通に配置すると、参照ボタンのラベル名が Browse になってしまってちょっと悲しい。ドキュメントを見た感じだと変更方法は乗っておらず、検索してみたら海外のサイトで「'Browse'をハードコーディングしているのはまずくね?」というようなやりとりがあるだけでした。(もっと探せばあったかもしれないけど、途中であきらめました)

パッチでも当てようかな~と思ってソースを眺めていたら…ボタンコントロールのクラスを取得して変更しちゃえばいいんじゃね?ということに気づいて、やってみたら変更できましたよ。

wxDirPickerCtrl *p = new wxDirPickerCtrl(
  親のコントロール,
  wxID_ANY,
  ディフォルトパス,
  説明 );
p->GetPickerCtrl()->SetLabel( wxT("参照") );

こんな感じで。ちなみに、wxFilePickerCtrl() も同じように出来ます。

GetPickerCtrl() はドキュメントに載っていないメソッドなので、そのうちなくなるかもしれないけど、2.8.9 では残っていました。

でも、wxWidgets はあまり流行ってくれないなぁ。MFC より楽しいのにw

日本語ドキュメントが少ないのも原因なのかな?