VS C++ GDI+实现双缓冲

在网上我们会搜到许多有关双缓冲的文章,但是大部分讲的并不是很明白,所以今天我就有条理的分享一下我的双缓冲技术的历程。
关于如何配置GDI+环境在网上很多并且配置也很简单,我就不多说了,我们直接进入正题。
1.首先,我们在void C***View::OnPaint()中配置OnPaint()函数。步骤如下:在类视图中找到C***View,然后右键选择属性在属性中会有一个消息按钮。
在这里插入图片描述
在这个消息列表中找到OnPaint点击添加就完成了对OnPaint()函数的配置。
2.在void C***View::OnPaint()函数中添加代码。我主要将框架代码给大家具体要实现的功能需要自己添加。

CRect rect;
GetClientRect(&rect);
Bitmap  bmp(rect.right,rect.bottom);
Graphics *CacheGraphics = Graphics::FromImage(&bmp);  //创建一个与bitmap关联的Graphics对象
CacheGraphics->Clear(Color::White);  //将背景色刷新为白色

******//这里是用来添加实现自己功能的地方

Graphics graphics01(dc.m_hDC);  //创建一个和hdc相关联的Graphics的对象
graphics01.DrawImage(&bmp, rect.left, rect.top, rect.right, rect.bottom);  //将bitmap中的图像显示到屏幕上

3.完成这些之后还有一个地方需要注意,直接给出代码。

BOOL CTankView::OnEraseBkgnd(CDC* pDC)
{	
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	//return CView::OnEraseBkgnd(pDC);
	return TRUE;
}

直接返回true。
到这里我们就完成了困惑我们的GDI+双缓冲技术了。
但是我还是需要提醒大家三点:
第一,要准确无误的完成对GDI+的配置;
第二,双缓冲是在OnPaint()函数中实现的,而不是OnDraw(CDC* pDC) ;
第三,就是要将 return CView::OnEraseBkgnd(pDC);改成return TRUE;
只要注意这三点基本上就已经完成了双缓冲技术,祝大家顺利。

你可能感兴趣的:(MFC,VS,C++,GDI+,双缓冲)