MFC双缓冲

在使用MFC进行图形绘制时,如果是频繁的刷新绘制会导致屏幕出现明显的闪烁,这是因为绘制时的刷新其实是不断地在进行新帧与旧帧的覆盖工作,我们一般使用的是屏幕DC来进行直接绘制,其速度是比较慢的,double-buffering(双缓冲技术)主要用于解决这种因单缓冲擦除图像时所带来的屏幕闪烁问题,它使用内存dc,先将待绘制的像素以位图(bmp)的形式存在内存里,再将位图绘制于屏幕上,其速度要快很多,可以解决一般的屏幕闪烁问题。

        CDC *pDC=GetDC();
	CDC	MemDC;    //定义一个显示设备对象
	MemDC.CreateCompatibleDC(pDC);    //建立与屏幕显示兼容的内存显示设备
	CRect rect;
	GetClientRect(&rect);
	CBitmap NewBitmap,*OldBitmap;    //定义位图对象
	NewBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());    //以左上角为起点
	OldBitmap=MemDC.SelectObject(&NewBitmap);    //将位图选入到内存显示设备中
	MemDC.FillSolidRect(rect,pDC->GetBkColor());    //用背景色将屏幕清除干净
	DrawCoordinate(&MemDC);
        //绘图
	DrawSomething(&MemDC);

	pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&MemDC,rect.left,rect.top,SRCCOPY);//将内存中的图拷贝到屏幕上进行显示
	ReleaseDC(pDC);
	MemDC.SelectObject(OldBitmap);    //绘图完成后的清理
	NewBitmap.DeleteObject();

 

你可能感兴趣的:(计算机图形学)