MFC中双缓冲技术比较常用,主要是为了避免因绘图过程的缓慢而闪烁。
一般把绘图的工作都直接在前台的DC(设备上下文)中进行,即绘图的全过程(一笔一画)都是用户可见的,如果绘图量过大,就会导致闪烁。
试着把前台的工作交给后台DC来完成,当后台完成绘图过后,再把后台DC中的内容复制到前台DC中(这一过程比前者快很多)。这就是双缓冲。
MFC中具体是这么做的:
- 声明后台DC和后台位图
CDC m_memClose;
CBitmap memBmp;
-
将后台DC初始化为与前台DC相适应的DC m_memClose.CreateCompatibleDC(GetDC());
-
将后台位图初始化为与前台位图相适应的位图 memBmp.CreateCompatibleBitmap(GetDC(),r.Width(),r.Height());
-
用后台DC选择后台位图对象 m_memClose.SelectObject(&memBmp);
-
之后便可将绘图工作交给后台DC,绘图完毕过后,再bilbit到前台的DC中。 m_memClose.BitBlt(0,0,r.Width(),r.Height(),GetDC(),0,0,SRCCOPY);
在这个基础上面,可以模拟按钮这一控件。
本文完 2012-08-29
Dylan http://daoluan.github.io/blog/
29 August 2012 会持续更新