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



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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值