MFC闪屏解决方案

23 篇文章 0 订阅
这两天一直在做UI设计,由于公司没有用到商业的Direct UI等界面库。所以码农们必须自己绘制自己的控件,于是乎这个编写UI的任务就落在我这个新码农身上了。然后以前一直逃避的问题有不期而遇。思密达。
问题一、自己绘制的背景把界面上原有的控件遮挡住了,为了解决这个问题,可把我等吊丝累坏了。
方案一、绘制完背景,然后再获取所有控件的区域,使其无效。于是问题解决了,可是新问题又来了,就是闪屏问题。这个问题就是由于背景与控件颜色覆盖造成的。也就是说着这种方案太监了。
方案二、把所有的控件的矩形计算出来,在绘制的时候去除这些矩形。对于这种方案,我只是想了想,应该可以。不过太难了,我是没有能力做到。
方案三、偶然的机会看到一句话:把dialog的ClipChildren属性设置为true。意思就是,在绘制窗口的时候,把控件区域剪切掉,等绘制完成后在复制回来,这个属性简直就是为绘制量身定制的,于是上面的问题解决了,并且如此简单,就点一下。原来解决方案如此简单。
如果频繁进行绘制刷新,这个毫无疑问会出现闪屏的情况。
方案一、运用双缓冲,无压力。就是在每次绘制的时候,直接贴上去。
方案二、在画背景之前把背景画刷设置为NULL_BRUSH。系统无法绘制。
方案三、把绘制背景的函数(OnEraseBkgnd(CDC*   pDC))内容注视掉,用return true替代,然后系统就没有办法利用默认画刷绘制背景了。但是后面两种方式解决了闪烁,但是界面会是一团糟。


使用GDI资源小结:
首先我们都知道有借有还这个定律,所以在学习C++的时候无比遵循这个规律,否则你会连连碰壁。
在使用带H的句柄的时候,例如:HBITMAP等,用完之后记得DeleteObject;
而对于带C的GDI封装类,则没有这个必要,以为在对象析构的时候,系统已经把他们释放了。如果你把系统资源句柄与类Detach了,那么你就需要接手系统资源管理,否则就要出现系统资源泄漏的。
用CDC的时候,如果创建了内存Dc用完之后也需要DeleteDc.....



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值