Picture Controlの再描画 – プログラミング – Home

通知
すべてクリア

Picture Controlの再描画


hikaru
 hikaru
(@hikaru)
ゲスト
結合: 17年前
投稿: 7
Topic starter  

お世話になっております。
Visutal Studio2008上で、ダイアログベースアプリケーションを作成しています。

http://www.g-ishihara.com/mfc_dc_03.htm
や、
http://t-recipe.com/vc/redraw.html
を参考に、Picture Controlの再描画をCSubClassDlg::OnPaint()上に実装しようとしてい
ますが、
CDialog::OnPaint()が呼ばれるとすべて消されてしまいます。

原因と対処法がわかりましたら教えていただければと思います。
どうぞよろしくお願いします。


引用解決済
トピックタグ
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

OnPaint()の内容は?
分かりますか?


返信引用
AR2
 AR2
(@ar2)
Estimable Member
結合: 5年前
投稿: 110
 

 書いてるOnPaint()の内容が不明なのと、どのようにOnPaint()を呼んでるかも不明なの
で外してたらすみません。
 一般には、RedrawWindow系なり、Invalidate系なり再描画をするときに子まで影響を及
ぼすか?背景を塗りつぶすか?という指定ができるので再描画の仕組みを試行錯誤してみ
るのも良いかと思います。
 おそらく、ダイアログのOnPaint()を呼ぶなかで、PictureコントロールのOnPaint()も
呼んでるので消えちゃってるんじゃないかと思ってます。

 このあたりの再描画の流れを把握してないのなら
>Picture Controlの再描画をCSubClassDlg::OnPaint()上に実装しようとしていますが、
 まずはPictureコントロールのOnPaint()に実装すると理解が進むんじゃないかと思います。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

派生元のダイアログの描画は、派生先のOnPaint()が実行された「後で」実行されます。
従って、派生先のOnPaint()で描画された結果は全て「上書き」され、失われます。
つまり、ダイアログの場合、派生先でOnPaint()内で何を書いても無効となります。

別の手段を考えましょう。

さて、どうしてもOnPaint()のタイミングで何かをしたいのであれば、
OnPaint()時に自身にカスタムなメッセージが、既存のコントロールが
反応しないWM_COMMANDなどを「PostMessage()」する方法もあります。
このメッセージは、派生元の再描画が完了後、自身に到達するはずです。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

うーーん、
どちらにしろ、OnPaint()上に再描画の処理は実装しないとだめですね。
他のウインドウが重なるだけで消えてしまいますね。
スクリーンセーバが働いた後もだめだったかな?


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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