MFC双缓存画图在使用MFC画图时,使用Invalidate()函数重画客户区,尤其是使用频繁的时候,我们可以感觉到整个客户区在不停地闪烁, 导致我们的界面的效果特别差,那么怎样能防止这一现象发生呢?我们可以有以下几种方法: * 局部重画:就是说,客户区画图时,我们把刚刚的有过改动的区域确定,然后只改变这一小区域,而不是把整个客户区重画。不过这样 做还是不能彻底解决闪烁的现象。因为重画的局部还是会闪烁。 * 异或画图:学计算机的人都知道,异或逻辑是相同为0,相异1。异或画图就是利用这一特性,在原来的图形的基础上重新再画一次,与前 一次的处处都相同,这种方法相当于擦除了原来的图形,然后再画自己想要的图形。我个人觉得这个技术在画类似橡皮筋等东西时很有用。 * 双缓存画图:下面我们重点讲解这种技术。MFC画图的闪烁原因不在于在屏幕上把图像画出来,而在于怎么去画。也就是说,如果原来有这么一张已经画好的图,而要计算机把这张图片画出来, 这就不会有闪烁现象发生了。双缓存技术利用的就是这个原理。双缓存主要就是在内存中间重新开辟一个空间,在内存中先把要画的图该怎么画先画出来,而屏幕上的东西暂时不去动它,待图像在内存中 画好之后,把画好的图像直接拷贝到屏幕上去,这样就几乎不需要时间去计算,也就不会有闪烁的现象发生。具体框架代码如下:BOOL CDataStructureView::OnEraseBkgnd(CDC* pDC)
{
CRect rc;CDC dcMem;
GetClientRect(&rc);
CBitmap bmp; //内存中承载临时图象的位图