C++のダブルバッファ機構
私たちが直接デバイス上で図を描くと、プログラムは自動的に作成した画像を表示デバイスにコピーして表示し、背景色が前の景色と大きく異なる場合、実際の状況はインタフェースの頻繁なフラッシュのように見えます.デュアルバッファメカニズムは、デバイスのメモリコピーを作成することです.メモリに図面を作成し、完了したら実際のデバイスに全体的にコピーして貼り付け、全体的なコピーを貼り付けることで、点滅を避けることができます.
次はメモリデバイスの作成です.
その後memCdc上で図を描くことができます.その後、以下のコードで完全な画像を実際のデバイスdcにコピーする.
私たちが自分で画像の後ろの背景を描くように要求し、同時に背景の内容を少量変更することができる場合、メモリ画像で私たちの背景を記憶し、このbmp画像(すなわち、上のmemBmp、これはmemBmpがローカル変数ではないことを要求する)を解放せず、背景の内容を再描画するたびに、bmp画像BitBltを直接コピーすればよい.もちろん、ここでは最後のbmpのリリースに注意します(または、バックグラウンドを更新する場合は、再リリースしてからCreateCompatibleBitmap割り当てを行う必要があります).
したがって、デュアルバッファのメモリ作図は、点滅の問題を解決するだけでなく、静的背景の再描画回数を減らし、インタフェースのリフレッシュ遅延を回避することができます.
次はメモリデバイスの作成です.
CDC memCdc;//
CBitmap memBmp;// , SelectObject
memCdc.CreateCompatibleDC(&dc);//dc
memBmp.CreateCompatibleBitmap(&dc, screenWidth, screenHeight);
memCdc.SelectObject(&memBmp);
その後memCdc上で図を描くことができます.その後、以下のコードで完全な画像を実際のデバイスdcにコピーする.
dc.BitBlt(0, 0, screenWidth, screenHeight, &memCdc, 0, 0, SRCCOPY);
memCdc.DeleteDC();
memBmp.DeleteObject();
私たちが自分で画像の後ろの背景を描くように要求し、同時に背景の内容を少量変更することができる場合、メモリ画像で私たちの背景を記憶し、このbmp画像(すなわち、上のmemBmp、これはmemBmpがローカル変数ではないことを要求する)を解放せず、背景の内容を再描画するたびに、bmp画像BitBltを直接コピーすればよい.もちろん、ここでは最後のbmpのリリースに注意します(または、バックグラウンドを更新する場合は、再リリースしてからCreateCompatibleBitmap割り当てを行う必要があります).
if(Cbmp.GetSafeHandle() != NULL)
Cbmp.DeleteObject();
したがって、デュアルバッファのメモリ作図は、点滅の問題を解決するだけでなく、静的背景の再描画回数を減らし、インタフェースのリフレッシュ遅延を回避することができます.