GdiplusFlat(7)双缓冲绘图和DC透明复制

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处: http://blog.csdn.net/zuishikonghuan/article/details/47316261

在上几篇中,我们说到了通过GdipCreateFromHDC函数将HDC(设备上下文句柄)装换成GDI+的Graphics对象,讲到了画笔和画刷的使用,并演示了何利用GDI+Flat来画图片和画文字。

其实,我们使用GdiplusFlat的根本目的并不是为了作图,而是为了做出一个漂亮的界面,这年头,用户喜欢个性的、美观的界面,而不像原来一样,只要功能实用,界面用系统的窗口主题无所谓。这也恰恰证明了计算机的普及,而不是专业人士的专用品了。

那么,我们在自绘界面的时候往往遇到过这样的问题:

1。窗口在自绘时闪烁问题严重。

2。自绘不能一次完成,用户看到的现象是,窗口先画出来背景,然后是标题,然后图片文字出现。这样的程序想必任何人都不愿意用。

解决之道:使用“双缓冲绘图

何谓“双缓冲绘图”?

首先我们需要明白,我们直接用GdiplusFlat或者其他东西绘图时,是直接绘制到显示设备上的,如左图:

      

也就是说,我们在图形设备上”一笔笔作图“时,因为每一笔之间有间隔,所以用户就看到自绘不能一次完成

那么闪烁的原因呢?闪烁是因为,每一次绘图,都要先把之前的图形抹去,再绘新图,所以造成了闪烁问题。

双缓冲绘图(如右图所示),是指创建一个和窗口的DC大小一样的”内存DC“,先把需要画的东西一步步画在内存DC里,然后一次性复制到窗口DC上,由于复制是一次性的,因此不需要先抹除原先的的内容,因此就没有闪烁问题了,由于复制是一次性的,用户看起来窗口就好像一次性绘制好了。

至于说内存DC是何时创建,这个就根据需要了,我一般是先创建,不销毁,用的时候用,如果什么时候需要绘图什么时候申请会影响效率

创建内存DC一般采用CreateCompatibleDC函数

此函数的原型:

HDC CreateCompatibleDC(
  _In_ HDC hdc
);

参数hdc:现有的 DC 的句柄。如果此句柄为 NULL,则该函数将创建与应用程序的当前屏幕兼容内存 DC。

返回值:成功返回内存DC的句柄,失败返回NULL

创建完之后需要创建设备无关位图对象,用CreateDIBSection函数</

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值