本程序在配置VC6环境后,创建单文档,仅更改了OnDraw函数,屏蔽了WM_ERASEBKGND消息
//实现GDI+双缓冲
void CGdiplusView::OnDraw(CDC* pDC)
{
CGdiplusDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
Graphics graph(pDC->m_hDC);//创建画图缓冲对象1
CRect rect;
GetClientRect(&rect); //获取窗口尺寸
Bitmap bmp(rect.right,rect.bottom);
Graphics* graphics=Graphics::FromImage(&bmp); //创建基于bmp的画图缓冲对象2
SolidBrush brush(Color(255,255,255,255));//定义画刷
Rect rc(rect.left,rect.top,rect.right,rect.bottom);
graphics->FillRectangle(&brush,rc);//在清除客户区背景色,与屏蔽WM_ERASEBKGND消息对应
graphics->SetSmoothingMode(SmoothingModeAntiAlias);//定义反锯齿模式
Pen blue(Color(255,0,0,255));
Pen red(Color(255,255,0,0));
int y=256;
for (int i=0;i<256;i+=5)
{ //在缓冲2上画图,同时也就画在了bmp上
graphics->DrawLine(&blue,0,y,i,0);
graphics->DrawLine(&red,256,i,y,256);
y-=5;
}
graph.DrawImage(&bmp,rect.left,rect.top,rect.right,rect.bottom);//将bmp输出到画图缓冲对象1
}
BOOL CGdiplusView::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
// return CView::OnEraseBkgnd(pDC);//屏蔽此消息
return TRUE;
}