Ver.4.04、RADツールを使って簡単なプログラムを
作っているのですが、ウインドウの再描画で悩んでいます。
クライアント領域いっぱいにビットマップを
貼り付けて、その上にボタンやコンボボックスなどの
コントロールを配置しました。
再描画のPaintイベントでは
コード: 全て選択
Sub MainWnd_Paint(hDC As DWord)
BitBlt(hDC,0,0,clientAreaWide,clientAreaHeight,hMemDC,0,0,SRCCOPY)
End Sub
などとしてクライアントエリア全体を再描画しています。
ところがこの方法だとビットマップのほんの一部に
新たな描画をしたり、あるいはこのウインドウの上に
僅かに他のウインドウが重なったりするだけでも
クライアントエリア全体を再描画してしまい、結果
配置されているボタンやコンボボックスなどの
コントロール部品がその都度ひどくちらついて見えて
しまいます。
解決には、ウインドウの重なりや新たな描画で
画像が変わってしまったその必要最小限の領域のみ
の再描画をさせればいいのだろうと、
BeginPaint()の実行時にその領域の大きさがセット
されるPAINTSTRUCT構造体をABのプログラムの中に
調べてみました。
Callback.wbpの中に以下の部分を見つけました。
コード: 全て選択
Case WM_PAINT
Dim ps As PAINTSTRUCT
Dim hDC As DWord
hDC=BeginPaint(hWnd,ps)
MainWnd_Paint(hDC)
EndPaint(hWnd,ps)
ただこの情報のセットされた構造体ps、
メインのMainWnd.sbpのPaint()イベントからは
どうしても参照することが出来ず、
CallBack.wbpを書き換えたり、色々試してみたのですが
CallBackwbpは実行時には改めて書き換えられてしまう様だったりして
中々うまく情報を取得出来ずにいます。
指定した範囲領域のウインドウの再描画について、
仮にそれ以外でも、再描画によるコントロール部品の
ちらつきを抑える相応しい方法がありましたら
是非教えてください。