現在ダイアログボックスにスタティックコントロールを配置し、表示更新する際不明な点があります。VC6.0 MFCです。
1、ダイアログボックス上のコントロールに、作成したビットマップを表示させる際、OnInitDialog関数内で、Bitbiltしていますが、表示されません。
ボタンクリックイベント等で、同様の手順でBitbiltすると表示されます。
これはなぜなのでしょうか?
また、ダイアログボックスが表示された際にBitmapを表示するにはどうすればよいでしょうか?
2、また、表示されたBitmapはダイアログボックスを動かしたり、隠れたりすると消えてしまいます。
再表示を自動的にさせるにはどうすればよいでしょうか?(OnDraw関数のようなものがあるのでしょうか?)
初歩的な質問で申し訳ありませんが、よろしくお願いいたします。
ダイアログだろうと、なんだろうとウィンドウの仕組みは
「一度表示したものを、
プログラマーの意思を上手く汲み取って、都合よく維持してくれる」
ものではありません。
描画・再描画のタイミングにあわせて描画処理する必要があります。
ダイアログならば、メッセージ関数のOnPaint(WM_PAINT)が
ウィンドウ操作されたときの描画のタイミングとして呼ばれる関数に
なっていますので、そこに描画作業を書きます。
OnInitDialogのタイミングでは
ダイアログの実体はできていても、画面に表示される前なので
このタイミングで描画処理しても意味がなくなってしまうのです。
ご回答ありがとうございます。
>OnInitDialogのタイミングでは
>ダイアログの実体はできていても、画面に表示される前なので
>このタイミングで描画処理しても意味がなくなってしまうのです。
アドバイスいただきましたとおり、
ダイアログボックスのメッセージ関数のOnPaint(WM_PAINT)内で、スタティックコントロール内の表示をしてみました。
しかし、表示後ずっと更新され続けているみたいに点滅し、他のエディットコントロール等が表示されません。
OnPaint内でどのように表記するべきなのか、アドバイスいただければ幸いです。
>しかし、表示後ずっと更新され続けているみたいに点滅し、他のエディットコントロール等が表示されません。
>OnPaint内でどのように表記するべきなのか、アドバイスいただければ幸いです。
どういう記述をされているのでしょうか?
とりあえず、VS2005のMFCでダイアログなプロジェクト作って、
OnPaint()を見ると…
CPaintDCで取得したDCに描画しています。
OnPaint()内でCPaintDCの取得も行っていないのでしょうか?
その場合、無効領域が解消されていないと判断されるのでOSよりWM_PAINTが再送されるかと思われますが。
HDC(MFC的にはCDC)の取得をGetDC()でやっている場合は正しくないです。
からあげさんがどう記述したのか書いてみてください。
デフォルトの動作の
CDialog::OnPaint()を消した・・・とかもありえそうだが
VC6のときのデフォルトの記述をおぼえてないや・・・
ツイート | ![]() |