雙緩衝即在內存中創建一個與屏幕繪圖區域一致的對象,先將圖形繪製到內存中的這個對象上,再一次性將這個對象上的圖形拷貝到屏幕上,這樣能大大加快繪圖的速度。
MARK一下實現步驟,略去了項目的繪畫代碼,親測有效。
我程序中是在
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
CMainFrame::OnSize()
CDC MemDC; //首先定義一個顯示設備對象
CBitmap MemBitmap;//定義一個位圖對象 //隨後建立與屏幕顯示兼容的內存顯示設備
MemDC.CreateCompatibleDC(NULL); //這時還不能繪圖,因爲沒有地方畫 ^_^
MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight); //建立一個與屏幕顯示兼容的位圖,至於位圖的大小嘛,可以用窗口的大小,也可以自己定義
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap); //將位圖選入到內存顯示設備中
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255)); //先用背景色將位圖清除乾淨,這裏我用的是白色作爲背景 你也可以用自己應該用的顏色
//繪圖內容
MemDC.MoveTo(……);
MemDC.LineTo(……);
pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY); //將內存中的圖拷貝到屏幕上進行顯示
MemDC.SelectObject(pOldBit);
MemBitmap.DeleteObject();
MemDC.DeleteDC();