1、为什么使用双缓冲?
我们都知道电脑CPU计算速度是非常快的,但是电脑要把信息显示到显示屏上,是比较慢的,因为显示屏要去更新像素点,假如我们要画1000条线,CPU画一条线只需要微秒,但是显示屏显示一条线需要1毫秒,如果我们不使用双缓冲,使用一个for循环输出1000条线,那么显示屏要刷新1000次才能完成1000条线的绘制,这会花掉1.001秒钟才能绘制一次我们想要的图形。很明显,这是非常低效率的。
使用双缓冲解决了什么呢?双缓冲是在内存中建立一张图纸,在图纸上做绘制,绘制完成后,将这张图纸显示到显示屏上。假设重新回到刚才的1000条线上。在内存中绘制1000条线,只需要1毫秒,然后把绘制好的图形输出到显示屏,也是1毫秒,最后,我们只用了2毫秒,就完成了我们想要的图形,所以,使用双缓冲绘制,是非常有必要的。
当然,我们可以使用只绘制一个小区域,来减少屏幕的刷新次数,但这不是我们为什么使用双缓冲要讨论的了。
2、MFC使用双缓冲的方法:
第一步:关闭View本来的背景刷新。重载View的WM_ERASEBKGND消息,直接return TRUE;
BOOL CMyView::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return TRUE;
return CView::OnEraseBkgnd(pDC);
}
第二步:在OnDraw中使用双缓冲