- ベストアンサー
画面リサイズ時のちらつきをなくす方法
- 画面リサイズ時に起こるちらつきを解消するための方法を探しています。
- 現在、DIB描画部の下に表示しているタイトル文字列がリサイズ時に重なってしまう問題があります。
- 背景の塗りつぶしを行うためにOnEraseBkgnd()をオーバーライドしていますが、新たに書き込んだ部分と重なってしまいます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
つまり WS_EX_COMPOSITED が使えない理由がある、ということでしょうか? そういう前提だとすると ・MFCのラッピングを使用し自分ではコーディングしない ・ソースコードが会社にあるので詳しく書くのは難しい となると、ちょっとお手上げです。 描画処理についても、ダブルバッファリングなので概要はそういう風になると思うのですが、正確なコード(と、もっと言うと会社側の提示してい る制限、目的とする環境など)が分からないと、なんとも言えません。 それでも推考してみると OnEraseBkgnd()でreturn TRUEとかInvalidateRect(FALSE)とか試していらっしゃるようなので (他にはウインドウクラス登録時にバックグラウンドをNULLにしたり、ウインドウクラスのスタイルからCS_HREDRAWやCS_VREDRAWを外してやるとかも色々考えられますが) >新たに書き込んだものと重なってしまいます という記述を見る限りそこはちゃんと対処出来てると思うのですが ダブルバッファが「本当にうまくいって」いますか? 概ね大丈夫ではないかと思うのですが、Vistaではどうなのか、というとVistaの抱える問題のごく一部しか私は把握していませんので、厳密に言うと完全には分かりません、が 普通に考えると「実際に『描画する側』のバッファ(表示されない裏画面)そのものに対して『背景を 塗りつぶしたうえに文字を書いて』やり」それを実際に見える方へコピーする、という方式にすれば 妥当に考えてOKと思います。 現状そういう風になっていますか?
その他の回答 (1)
- LongSecret
- ベストアンサー率68% (22/32)
いざという時の拡張ウインドウスタイル WS_EX_COMPOSITED ではダメですか? ただいざというとき、なので 状況によっては使ってはダメな場合があるので ちょうど興味がありますから、それの使用が無理でしたら よろしければOSと サイズ変更時(WM_SIZE)の処理、描画処理、ウインドウ生成、ウインドウクラス登録のあたりのコードを教えてください。
補足
早速の回答、ありがとうございます。 >よろしければOSと >サイズ変更時(WM_SIZE)の処理、描画処理、ウインドウ生成、ウインドウクラス登録のあたりのコードを教えてください。 OSはVistaです。 MFCのDocument-Viewの仕組みを使っていまして、ウィンドウ生成、ウィンドウクラス登録はMFCでラッピングされています(自分ではコーディングしない)が、 ソースコードが会社にありますので、詳しく書くのは難しいです^^; 文章にしますと、 ・WM_SIZE(OnSize)の処理 InvalidateRect(FALSE)でクライアント領域の無効化とステータスバーの内容更新だけです。 ・描画処理 1.DIBをいったんメモリDCへ書き込んだ後、実際の画面用のDCに書き込む。 2.タイトルも1.と同様にいったんメモリDCへ書き込んだ後、実際の画面用のDCに書き込む。 と、こんな感じです。 よく考えると、自分で背景を塗りつぶしてしまったら、システムが塗りつぶす色が違うだけで、塗りつぶし→描画の繰り返しで、結局ちらついてしまうような気がします。
お礼
先に背景を塗りつぶしてその上に書きたいものを書くようにしたら、実現できました! ありがとうございました。