ダイアログのちらつき


いしだ  2010-05-06 14:53:24  No: 71595  IP: 192.*.*.*

ダイアログにサイズ変更の機能を持たせているのですが、
大きさを変えるたびにリストビューやツリービューがちらついてしまいます。
しかし、グループボックスも使っているため、
ダイアログにWS_CLIPCHILDRENを付けることができません。

この場合、どのようにちらつきを防ぐべきでしょうか。

ちなみに、ダイアログに標準でWS_CLIPCHILDRENが付いていないのは、
グループボックスやピクチャ(フレーム)の内部を塗りつぶすだけのため
と解釈してもよいのでしょうか。
それとも、それ以外の理由もあるのでしょうか。

編集 削除
仲澤@失業者  2010-05-10 12:49:57  No: 71596  IP: 192.*.*.*

MFCなのかSDKなのかぐらいは書きましょう(vv;)。

サイズ変更のとき「何をするのか」はプログラマーしだいです。
WM_SIZEメッセージに応答して、したいことをしましょう。
例えば、特定のコントロールに再描画が発生しないようにも
コードできますし、WM_SIZEでは一切の再描画が発生しないようにして、
WM_EXITSIZEMOVE時のみ再描画するなど、何でもありですよね。

>ちなみに、ダイアログに標準でWS_CLIPCHILDRENが付いていないのは、
>グループボックスやピクチャ(フレーム)の内部を塗りつぶすだけのため
>と解釈してもよいのでしょうか。

一般に
1.DLGはサイズ変更が発生しない。
2.DLG上のコントロール(子ウインドウ)は全て自己の背景を自前で
    塗りつぶす
という(レガシーでの)前提になっているからでしょう。

編集 削除
ロマ  2010-05-11 14:15:30  No: 71597  IP: 192.*.*.*

Norton/Yao本によれば、
親にWS_CLIPCHILDRENが無く子にCS_PARENTDCがある場合は
親と子のクリップ領域は等しくなり、
子用のクリップ領域を計算する必要がないのでパフォーマンスがよいとのことです。

Windows1.xの遺産のようです(cpu=8088,ram=256KB)。

副次効果として、
コントロールの領域の外にフォーカス枠などを描画できる様になります。

> しかし、グループボックスも使っているため、
> ダイアログにWS_CLIPCHILDRENを付けることができません。
WS_CLIPCHILDRENをつけるとまずいですか。

編集 削除