解决vc界面闪烁问题

这是个老生常谈的问题,有过vc编写界面的经验的人大都遇过,至于问题产生的原因,网上已有太多描述,这里只给出几个解决方法的建议。

1、双缓冲,这个是基本是必须的处理方式,同时最好处理WM_ERASEBKGND消息。

2、有些情况尽管使用了双缓冲,但是在窗口拉伸的时候还是有闪烁的情况,例如界面控件很复杂,基本都为自绘控件时。这时窗口的WS_CLIPCHILDREN | WS_CLIPSIBLINGS属性或许是有帮助的,窗口被设置该属性后,所有的子控件都是自己处理绘制。这时难免会带来一些例如子窗口背景绘制的问题(GroupBox比较明显,各位可以尝试一下)。这时需要所有的子控件都要自己处理背景。360安全卫士即通过这种方式解决界面刷新问题,具体可以spy++抓抓看。

3、最终解决方案,在主窗体存在大量子窗口时,其中的关键就是ExcludeClipRect。通过该函数根据子窗口类型,动态设置窗口的裁剪区域。子窗口根据实际需要做相应的自绘处理,这样就既保证了效率,又保证了扩展的灵活性。UISkinX界面库即是通过该方式实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值