MFC中绘图不闪烁

来自:http://group.gimoo.net/review/19416

你还是在内存上画图吧,那是那些高手教会我的。
首先添加WM_ERASEBKGND消息的响应函数
BOOL CTest1View::OnEraseBkgnd(CDC pDC) {  // return CView::OnEraseBkgnd(pDC); //是调用父类的OnEraseBkgnd函数,我们屏蔽此调用,只须直接return TRUE;即可。 return TRUE; } void CTest1View::OnDraw(CDC* pDC) { CTest1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CRect rect; GetClientRect(&rect); ptCenter = rect.CenterPoint(); CDC dcMem; //用于缓冲作图的内存DC CBitmap bmp;// 内存中承载临时图象的位图 dcMem.CreateCompatibleDC(pDC); //依附窗口DC创建兼容内存DC bmp.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());//创建兼容位图 dcMem.SelectObject(&bmp); //将位图选择进内存DC // 按原来背景填充客户区,不然会是黑色 dcMem.FillSolidRect(rect,pDC->GetBkColor()); //下面用dcMem...画你要画的东西都放在这里,我以画线为例 dcMem.MoveTo(10,10); dcMem.LineTo(50,50); //将内存DC上的图象拷贝到前台 pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY); dcMem.DeleteDC();// 删除DC bmp.DeleteObject();// 删除位图 }

你可能感兴趣的:(MFC中绘图不闪烁)