【MFC】描画処理でダブルバッファリングを行う方法

MFCで自前で描画処理を行う場合、GDIでゴリゴリ描いていく方法があります。

それらの処理をOnPaintからの流れに記述すれば問題なく描画処理が行われるように見えますが、アニメーションや他のウィンドウの重なりの影響等で高速に連続描画される場合に、高頻度でチラつきが発生してしまいます。

MFCに限らずですが、描画処理でチラツキが発生する場合には、『ダブルバッファリング』という手法を用いることでチラツキの発生を抑制することができます。

ちなみに描画処理については以下の記事で紹介していますのでご参考までに。

【MFC】色々な図形の描画方法

スポンサーリンク

MFCでダブルバッファリングを行う場合には、以下のような処理の中で「ここから描画処理」から「ここまで描画処理」の間に、これまで行っていたような描画処理を仮想デバイスコンテキストに対して行えば良いです。

上記のような関数を作る場合には、必ずOnPaintからのパス上で呼ばれるようにする必要があります。

また、再描画が実施されるたびに仮想デバイスコンテキストを生成することが無駄だと感じる場合には、ウィンドウやコントロールの生成時に仮想デバイスコンテキストを生成してメンバとしておくことで、再描画時には仮想デバイスコンテキストへの描画と実デバイスコンテキストへの貼り付けだけで良くなります。
(そんなに速度的には大きくは変わらないのでどちらでも良いかと思います)

 

今はあまりGDIでゴリゴリ描いていくと言うのはあまり主流ではないかもしれませんが、やり方を知っていると結構便利だったりもします。

よっぽど高頻度での描画更新や広い範囲の描画更新でなければ、他の描画処理を用いるよりも高速で、ダブルバッファリングを用いることでチラつきも無くなるので、独自の描画処理が必要な場合には是非試してみてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です