お世話になっております。
Visutal Studio2008上で、ダイアログベースアプリケーションを作成しています。
http://www.g-ishihara.com/mfc_dc_03.htm
や、
http://t-recipe.com/vc/redraw.html
を参考に、Picture Controlの再描画をCSubClassDlg::OnPaint()上に実装しようとしてい
ますが、
CDialog::OnPaint()が呼ばれるとすべて消されてしまいます。
原因と対処法がわかりましたら教えていただければと思います。
どうぞよろしくお願いします。
OnPaint()の内容は?
分かりますか?
書いてるOnPaint()の内容が不明なのと、どのようにOnPaint()を呼んでるかも不明なの
で外してたらすみません。
一般には、RedrawWindow系なり、Invalidate系なり再描画をするときに子まで影響を及
ぼすか?背景を塗りつぶすか?という指定ができるので再描画の仕組みを試行錯誤してみ
るのも良いかと思います。
おそらく、ダイアログのOnPaint()を呼ぶなかで、PictureコントロールのOnPaint()も
呼んでるので消えちゃってるんじゃないかと思ってます。
このあたりの再描画の流れを把握してないのなら
>Picture Controlの再描画をCSubClassDlg::OnPaint()上に実装しようとしていますが、
まずはPictureコントロールのOnPaint()に実装すると理解が進むんじゃないかと思います。
派生元のダイアログの描画は、派生先のOnPaint()が実行された「後で」実行されます。
従って、派生先のOnPaint()で描画された結果は全て「上書き」され、失われます。
つまり、ダイアログの場合、派生先でOnPaint()内で何を書いても無効となります。
別の手段を考えましょう。
さて、どうしてもOnPaint()のタイミングで何かをしたいのであれば、
OnPaint()時に自身にカスタムなメッセージが、既存のコントロールが
反応しないWM_COMMANDなどを「PostMessage()」する方法もあります。
このメッセージは、派生元の再描画が完了後、自身に到達するはずです。
うーーん、
どちらにしろ、OnPaint()上に再描画の処理は実装しないとだめですね。
他のウインドウが重なるだけで消えてしまいますね。
スクリーンセーバが働いた後もだめだったかな?