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