ボタン等が消えてしまいます。

[戻る]
ぺこ 2006/06/29(木) 00:32:55
いつもお世話になっています。
ぺこです。

[ 困っている事 ]
FillSolidRectで塗りつぶした上に
ボタンやコンボボックスを置いているのですが、
画面を別のウィンドウとかで隠したりすると、
FillSolidRectの上にあったコントロールが全て消えてしまうのです。
再描画した時に消えてるのかなーって思い、
FillSolidRectの後にm_ButtonA.ShowWindow( TRUE )をやってみたのですが、
駄目でした。

FillSolidRectはOnPaint内で行っているのですが、
これがまずいでしょうか?

こちらの環境は
WinXp SP1
VC++6.0
MFCのダイアログベースです。

どうぞ宜しくお願い致します。
ぺこ

ぺこ 2006/06/29(木) 03:13:09
[[解決]]
OnPaint()内で FillSolidRectを行う前に
Invalidate( FALSE );
を追加した所コントロール等が消える事は無くなりました。

一応解決にしますが、
もしこの記述が危険な行為だったり、
間違った使い方だよ、
って言う場合は教えて頂ければ幸いです。

宜しくお願い致します。
ぺこ

kure 2006/06/29(木) 07:26:51
FillSolidRectで描画する領域が
Window全体なら、自前描画せずにバックグランドカラーを
設定するだけで良いと思いますよ。
そうすればわざわざFillSolidRectとかInvalidateとかする必要ありませんし。

超初心者 2006/06/30(金) 00:26:25
ダイアログは、子ウィンドウ(ボタンとか)の上に描画できる
設定になっているんだよ。
だからダイアログが塗りつぶしをすれば
ボタンとかまで塗りつぶししてしまう。

昔からそうだった。
当時は高速化のためといっている。
今はどうでもいいんだろうな。
半透明ウィンドウとか負荷つけまくり。

> m_ButtonA.ShowWindow( TRUE )をやってみたのですが
そういう使い方だっけ?

> 画面を別のウィンドウとかで隠したりすると
再描画のされ方が状況により変わるみたいだね。
Invalidate( FALSE )でなぜ解決するのかわからんけど
よかったね。

もしかしたら背景の塗りつぶしならばWM_ERACEなんちゃらがいいのかも

古いスレッドには追加発言できません。