質問: 画面リサイズ時のちらつきをなくす方法 mfcです。 ワーカースレッドで取得したdibを定期的に描画するプログラムを作っています。 dib描画部の下にはタイトル的な文字列をtextoutしています。 リサイズ時にはdibのサイズとタイトル文字列表示領域のサイズも変化させる必要があります。 現在、画面をリサイズするとちらつくという問題の対応に悩んでいます。 コンパチdcなどを使ってダブルバッファリングを行うというのはわかっているのですが、 そもそもリサイズ時にちらつくということは、背景が白(デフォルトのブラシ)で塗りつぶされてしまうのが原因だと思っているので、 onerasebkgnd()をオーバーライドして、return true するようにしました。 ちらつかなくなったのですが、onerasebkgnd()でほかに何もしていないので、リサイズ前のdibとタイトル文字列が残ってしまって、新たに書き込んだものと重なってしまいます。 onerasebkgnd()で背景をいったん塗りつぶせばいいのではないかと思っているのですが、私の考えは正しいでしょうか?
回答: つまり ws_ex_composited が使えない理由がある、ということでしょうか? そういう前提だとすると ・mfcのラッピングを使用し自分ではコーディングしない ・ソースコードが会社にあるので詳しく書くのは難しい となると、ちょっとお手上げです。 描画処理についても、ダブルバッファリングなので概要はそういう風になると思うのですが、正確なコード(と、もっと言うと会社側の提示してい る制限、目的とする環境など)が分からないと、なんとも言えません。 それでも推考してみると onerasebkgnd()でreturn trueとかinvalidaterect(false)とか試していらっしゃるようなので (他にはウインドウクラス登録時にバックグラウンドをnullにしたり、ウインドウクラスのスタイルからcs_hredrawやcs_vredrawを外してやるとかも色々考えられますが) >新たに書き込んだものと重なってしまいます という記述を見る限りそこはちゃんと対処出来てると思うのですが ダブルバッファが「本当にうまくいって」いますか? 概ね大丈夫ではないかと思うのですが、vistaではどうなのか、というとvistaの抱える問題のごく一部しか私は把握していませんので、厳密に言うと完全には分かりません、が 普通に考えると「実際に『描画する側』のバッファ(表示されない裏画面)そのものに対して『背景を 塗りつぶしたうえに文字を書いて』やり」それを実際に見える方へコピーする、という方式にすれば 妥当に考えてokと思います。 現状そういう風になっていますか?