直接在設備上下文DC中作圖;
void CGdiBitmapView::OnPaintBitmap()
{
// TODO: Add your command handler code here
//取得DC設備
CDC *pDC = GetDC();
//保存DC狀態
int nOldDC = pDC->SaveDC();
//獲取客戶區大小
RECT rect;
GetClientRect(&rect);
//創建與DC兼容的Bitmap
m_pViewBitmap->CreateCompatibleBitmap(pDC, rect.right, rect.bottom);
//選擇Bitmap到DC中
pDC->SelectObject(m_pViewBitmap);
//背景填充為紫紅色
pDC->FillSolidRect(&rect, 333) ;
//畫圖
POINT startPoint;
startPoint.x = 0;
startPoint.y = 0;
POINT endPoint;
endPoint.x = rect.right;
endPoint.y = rect.bottom;
pDC->MoveTo(startPoint);
pDC->LineTo(endPoint);
//釋放DC資源
pDC->RestoreDC(nOldDC);
ReleaseDC(pDC);
}
在內存DC中作完圖,拷貝到DC上(也就是雙緩存機制);
void CGdiBitmapView::OnPaintBitmap()
{
// TODO: Add your command handler code here
//取得DC設備
CDC *pDC = GetDC();
//保存DC狀態
int nOldDC = pDC->SaveDC();
//創建內存DC
CDC memDC;
memDC.CreateCompatibleDC(pDC);
int nOldMemDC = memDC.SaveDC();
//取得客戶區大小
RECT rect;
GetClientRect(&rect);
//創建兼容Bitmap
m_pViewBitmap->CreateCompatibleBitmap(pDC, rect.right, rect.bottom);
//選擇Bitmap到內存DC,填充紫紅色背景
memDC.SelectObject(m_pViewBitmap);
memDC.FillSolidRect(&rect, 333) ;
//畫圖
POINT startPoint;
startPoint.x = 0;
startPoint.y = 0;
POINT endPoint;
endPoint.x = rect.right;
endPoint.y = rect.bottom;
memDC.MoveTo(startPoint);
memDC.LineTo(endPoint);
//拷貝內存DC到DC上
pDC->BitBlt(0, 0, rect.right,rect.bottom, &memDC, 0, 0, SRCCOPY);
//釋放內存DC資源
memDC.RestoreDC(nOldMemDC);
memDC.DeleteDC();
//釋放DC資源
pDC->RestoreDC(nOldDC);
ReleaseDC(pDC);
}