在双缓冲方法中,首先要做的是屏蔽背景刷新。背景刷新其实是在响应WM_ERASEBKGND消息。我们在视类中添加对这个消息的响应,可以看到缺省的代码如下:

BOOL CMYView::OnEraseBkgnd(CDC* pDC)

{

      return CView::OnEraseBkgnd(pDC);

}

是调用父类的OnEraseBkgnd函数,我们屏蔽此调用,只须直接return TRUE;即可。

 

 

CDC dcMem;                                                  //用于缓冲作图的内存DC

CBitmap bmp;                                                 //内存中承载临时图象的位图

dcMem.CreateCompatibleDC(pDC);               //依附窗口DC创建兼容内存DC

bmp.CreateCompatibleBitmap(&dcMem,rect.Width(),rect.Height());//创建兼容位图

dcMem.SelectObject(&bmp);                          //将位图选择进内存DC

dcMem.FillSolidRect(rect,pDC->GetBkColor());//按原来背景填充客户区,不然会是黑色

//////////////////////////////////////////////////////////////////

绘图部分代码,使用dcMem,不要用pDC。

/////////////////////////////////////////////////////////////////

pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,SRCCOPY);//将内存DC上的图象拷贝到前台

dcMem.DeleteDC();                                       //删除DC

bm.DeleteObject();                                        //删除位图

 

posted on 2014-05-02 21:45  LDoctor  阅读(353)  评论(0编辑  收藏  举报