闻心阁

一蓑烟雨看苍生,半壶浊酒笑红尘

VC双缓冲绘图小记2

2011-10-30 约 1 分钟读完 搬砖秘籍

之前写过一篇小文《VC双缓冲绘图小记》,这期间一直在折腾这个东西,因为绘图时候的闪烁总让我感到不可接受,所以这是对于上一篇博客的补充版本,也可说是VC双缓冲绘图补丁版。

废话不多说,首先要感谢C瓜哥的提醒,在高版本的VS中已经自带了一个CMemDC类,利用这个类可以放心的绘图了,不用再去搞复杂的双缓冲了。PS:高版本=(VS2008SP1以及以后),低版本的后面也有介绍。

先说一下高版本的方法,也是本人现在使用的方法,因为这个方法系统自带,无需导入第三方文件。使用方法如下:

STEP 1 响应WM_ERASEBKGND消息

返回FALSE,这样就不擦除背景了。

BOOL CDemoView::OnEraseBkgnd(CDC* pDC) { return FALSE; }

STEP 2 在需要作图的地方使用CMemDC

void CDemoView::OnDraw(CDC* pDC)

{

CGestureDemoDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

 

CMemDC dcMem(*pDC, this);

CDC& dc = dcMem.GetDC();

//用dc来绘图就可以实现栓缓冲

……

}

VS低版本中CMemDC使用方法。在低版本中可以导入一个继承于CDC的类CMemDC,使用的时候需要使用#include “MemDC.h”,点击此处下载

使用方法与之前的类似,只需要用一个CDC的对象初始化就行。

CMemDC pMemDC(pDC);

总结完毕,如果还有什么其他方法请各位多多指教哈~部分资料来自这里