MFC双缓冲作图解决刷新闪屏问题

2019独角兽企业重金招聘Python工程师标准>>> hot3.png



1、双缓冲作图基本思路

使用bitblt函数,其原理是可以支持图形块的快速复制;所以,我们可以先在内存中作图,然后使用BitBlt函数将内存中的图片复制到前台,同时禁止背景刷新,这样就消除了闪烁。

2、双缓冲作图的实现步骤(以下显示基于OnPaint函数)

CPaintDC dc(this);
	CRect rectClient;
	CDC dcMem,dcBkgnd;
	CBitmap bitmapTemp, *pOldBitmap;
	//获取窗口信息
	GetClientRect(&rectClient);
	//创建内存位图
	bitmapTemp.CreateCompatibleBitmap(&dc, rectClient.Width(), rectClient.Height());
	//创建内存位图
	dcMem.CreateCompatibelBitmap(&dc);            //依附窗口DC创建兼容的DC
	//将内存位图选入内存dc
	pOldBitmap = dcMem.SelectObject(&bitmapTemp);
	//填充颜色
	dcMem.FillSolidRect(rectClient,RGB(255,125,0));   //主要的作图操作
	//绘制图片到主dc
	dc.BitBlt(0, 0, rectClient.Width(), rectClient.Height(), &dcMem, 0, 0, SRCCOPY);
	//内存复位
	dcMem.SelectObject(pOldBitmap);


3BitBlt函数说明:

函数原型

BOOL BitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int
nXSrc,
int nYSrc, DWORD dwRop);

参数

hdcDest:指向目标设备环境的句柄。

nXDest:指定目标矩形区域左上角的X轴逻辑坐标。

nYDest:指定目标矩形区域左上角的Y轴逻辑坐标。

nWidth:指定源和目标矩形区域的逻辑宽度。

nHeight:指定源和目标矩形区域的逻辑高度。

hdcSrc:指向源设备环境的句柄。

nXSrc:指定源矩形区域左上角的X轴逻辑坐标。

nYSrc:指定源矩形区域左上角的Y轴逻辑坐标。

dwRop:指定光栅操作代码。这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。



转载于:https://my.oschina.net/ijaychen/blog/167865

你可能感兴趣的:(MFC双缓冲作图解决刷新闪屏问题)