スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

wxWidgets 2.9.4 で変更された(姫踊子草的に)重要な点

本記事は情報処理技術者向け。

wxWidgets 2.8 系から 2.9.4 に差し替えて姫踊子草の開発でひっかかった部分のメモです。

wxGridSizer系統の AddGrowableRow/Column 判定が厳しくなった

wxGridSizer, wxGridBagSizer, wxFlexGridSizer で AddGrowableRow や AddGrowableColumn を呼び出すとき、呼び出し時点でその行なり列なりが実在しないとダイアログ付きで警告されるようになりました。

wxURI::Unescape の問題で wxLaunchDefaultBrowser が動作しないことがある

file:/// プロトコルで ASCII 外の文字列を含む URI を渡すと wxURL::Unescape でエラー落ち。

で、 wxLaunchDefaultBrowser が内部で Unescape を呼び出すため、やっぱりエラー落ちします。もっとも file プロトコルではない通常のパスを渡せばいいだけなのでコードが呼び出す分には問題ないです。ユーザー指定の URL を受ける場合は問題になりますが。

__WXDEBUG__ マクロの使い方に変更がある

このため #ifdef __WXDEBUG__ で判定をとっているとリリースビルドでもデバッグコードが埋め込まれることがあります。

wxBitmapButton の変更

wxBitmapButton の機能は wxButton の基本性能になったため、互換上の定義でしかなくなりましたが、もう一点重要な変更が。

描画するビットマップは変更のたびに SetBitmap を呼び出さないと更新されません。メモリ節約のつもりで GetBitmap で受け取ったオブジェクトを変更するだけでは効果が反映されなくなりました。

wxString::Printf 関連の動作が厳しくなった

一番きついのはコレ。

wxString::Format とか wxLogXXXX 系統とかをたくさん使っているんですが、不適合と見なされるとリリースビルドでもダイアログを出して止まってしまうので新年明けてからの姫踊子草はほとんどログを出さなくなっています。

C++ の不定個数引数関数に一時オブジェクトを渡した場合の動作は「定義されていない」というのが年末に知った衝撃の事実でありまして。Visual C++ では適当によろしくしてくれますが他の環境では不定動作になるから wxWidgets 全体でも認めないことにしよう、ということになったらしい。

いやどーすんの姫踊子草のこれ。なんとかして wxString を使い続けるのか?それとも boost::format に片っ端から差し替えていくのか?


2013-01-05 追記。

リリースビルドで __WXDEBUG__ を使わせないためにデバッグレベル系のマクロを定義したらいいんでないの?とか思ってみた。そしたらログの問題も記録がおかしくなるだけでとまったりしなくなるんでないの、とか。

wxFrexGridSizer で GetRows() が常に 0 を返しているらしい

追加案件1。これはさすがに瑕疵認定でいいんじゃないかなぁ…

wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT).GetPixelSize() の幅の値がゼロ

追加案件2。仕様なのかなんなのかよくわからん。wxSYS_DEVICE_DEFAULT_FONT なら問題なし、ただし Windows でだけ有効。

wxProgressDialog に SetIcon() が効かない

追加案件3。これも姫踊子草限定なのかなんなのか不明。


2013-01-27 追記。

一番困った wxString::Format や wxLogXXXX の件は実行速度の問題は残るものの対処できました

theme : プログラミング
genre : コンピュータ

comment

Secret

リンク
RSSフィード
ブログ内検索
最近のトラックバック
月別アーカイブ
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。