雙緩衝繪圖

CDC* pMemDC = new CDC();    //new一個DC
CRect rcClient;             //繪圖的矩形
int Width  = 0;             //寬度
int Height = 0;             //高度
//獲取客戶區大小
GetClientRect(&rcClient);
//保存寬度與高度
Width = rcClient.Width();
Height = rcClient.Height();
//創建pDC的兼容DC
pMemDC->CreateCompatibleDC(pDC);
//創建pDC的兼容位圖
CBitamp MemBitmap;
MemBitmap.CreateCompatibleBitmap(pDC, Width, Height);
//選擇該位圖
CBitmap* pOldBitmap = pMemDC->SelectObject(&MemBitmap);
//準備繪圖工具:畫筆、畫刷或圖片
CPen Pen;
//以畫筆爲例:實心,筆寬2,紅色
Pen.CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
//選中該畫筆
CPen* pOldPen = pMemDC->SelectObject(&Pen);
//設置背景色爲原背景色
pMemDC->FillSolidRect(rcClient, pDC->GetBkColor());
//在兼容位圖中將圖形繪製好
pMemDC->MoveTo(CPoint(44, 44));
pMemDC->LineTo(CPoint(77, 77));
//將繪製好的圖像一次性拷貝到UI DC中
pDC->BitBlt(0, 0, Width, Height, pMemDC, 0 , 0, SRCCOPY);
//選回原來的GDI對象
pMemDC->SelectObject(pOldBitmap);
pMemDC->SelectObject(pOldPen);
//銷燬創建的GDI對象
Pen.DeleteObject();
MemBitmap.DeleteObject();
//銷燬DC
pMemDC->DeleteDC();
//回收內存
delete pMemDC;
pMemDC = NULL;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章