void Credraw_exView::OnDraw(CDC* pDC)
{
Credraw_exDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CPoint ptCenter;
CRect rect,ellipseRect;
GetClientRect(&rect);
ptCenter = rect.CenterPoint();
CDC dcMem; //用于缓冲作图的内存DC
CBitmap bmp; //内存中承载临时图象的位图
CBrush brush;
brush.CreateHatchBrush(HS_DIAGCROSS,RGB(255,255,0));
dcMem.CreateCompatibleDC(pDC); //依附窗口DC创建兼容内存DC
bmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());//创建兼容位图
dcMem.SelectObject(&bmp); //将位图选择进内存DC
dcMem.SelectObject(&brush);
//按原来背景填充客户区,不然会是黑色
dcMem.FillSolidRect(rect,pDC->GetBkColor());
for(int i=20;i>0;i--)
{
ellipseRect.SetRect(ptCenter,ptCenter);
ellipseRect.InflateRect(i*10,i*10);
dcMem.Ellipse(ellipseRect);
}
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);//将内存DC上的图象拷贝到前台
dcMem.DeleteDC(); //删除DC
bmp.DeleteObject(); //删除位图
// TODO: 在此处为本机数据添加绘制代码
}
Reference:
http://baike.baidu.com/link?url=Z92j1ACgQTsNZD_SaU3xqCMIZG4BbRDlXD2yUOCKG48Ld75plIpLyjnBPeL6Vp3ryb8WdY8laNX657QugdYEWa
编程中的双缓冲技术
最新推荐文章于 2021-05-19 07:11:10 发布