Nov 30, 2005

WTL::CDialogResizeで WS_CLIPCHILDRENを指定するとグループボックスの背景が塗りつぶされない

ポスト @ 22:14:36 , 修正 @ Aug 21, 2009 11:16:13 | プログラミング,ATL/WTL

今おしごとで作っているのはあくまでもコントロール。そのテストのためだけに存在するリサイザブルダイアログボックスはオマケ中のオマケに過ぎず、そこで本筋に関係ない問題で悩んでも200%有害なだけなのですが…

グループボックス(ラジオボタンを四角い枠線で囲ってあるやつ、設定画面でごく普通に出てきます)を貼ったダイアログボックスを、WTLの超有用クラス、CDialogResize で、リサイズ動作中のちらつき防止のため WS_CLIPCHILDREN を指定して動作させると、グループボックスの背景だけが見事に消去されません。

これ、あまりにキモいので、元バイトで今は代取のK君に質問してみたところ…

これは、グループボックスの特異体質による仕様とのこと。

グループボックスは、他の種類のコントロールとはまったく異なり、別のコントロールを自分のウィンドウの内部に表示させるものです。ので、他のコントロールが背景色の描画を自前で行うのに対し、グループボックスは親ダイアログにそれを委譲します。いわば、デフォルトがオーなドローみたいなものです。

で、ダイアログリサイズを使って、WS_CLIPCHILDREN を指定すると、親ダイアログは当然のごとく、グループボックスという子供の領域を自分の描画から除外します

あぁ、見事に誰も描画しませんねこれでは。笑

解決策ですが、WS_CLIPCHILDREN をはずせばカンタン。ただしこの場合、リサイズ中に激しくちらつきが発生してしまいますのでイクナイ。
一方、この下にオーナドローのピクチャボックスを貼り付ければどうか、ということでやってみました。一応うまく動いているようです。

しかし、こんな仕事に関係ないところでここまで凝るか普通? 笑

Trackback

No Trackbacks

Track from Your Website

http://blog.izumichan.com/trackback/tb.php?id=106

Comment

No Comments

Post Your Comment


*は入力必須です。E-Mailは公開されません。