ボタン等が消えてしまいます。 – プログラミング – Home

ボタン等が消えてしまいます。
 
通知
すべてクリア

[解決済] ボタン等が消えてしまいます。


ぺこ
 ぺこ
(@ぺこ)
ゲスト
結合: 18年前
投稿: 23
Topic starter  

いつもお世話になっています。
ぺこです。

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

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

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

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


引用未解決
トピックタグ
ぺこ
 ぺこ
(@ぺこ)
ゲスト
結合: 18年前
投稿: 23
Topic starter  

OnPaint()内で FillSolidRectを行う前に
Invalidate( FALSE );
を追加した所コントロール等が消える事は無くなりました。

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

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


返信引用
kure
 kure
(@kure)
ゲスト
結合: 19年前
投稿: 48
 

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


返信引用
超初心者
 超初心者
(@超初心者)
ゲスト
結合: 23年前
投稿: 139
 

ダイアログは、子ウィンドウ(ボタンとか)の上に描画できる
設定になっているんだよ。
だからダイアログが塗りつぶしをすれば
ボタンとかまで塗りつぶししてしまう。

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

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました