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);
3、BitBlt函数说明:
函数原型
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