欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-05 12:30:38
...


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