编程中的双缓冲技术

来源:互联网 发布:幕府将军2优化补丁 编辑:程序博客网 时间:2024/05/17 08:17
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