在消息响应函数中立即处理PENDING WM_PAINT解决刷新问题

本文探讨了一种IM聊天窗口在关闭时出现的性能问题,即窗口关闭缓慢,影响用户体验。作者分析了问题原因,指出在WM_CLOSE消息响应中HIDE窗口无法立即生效,因为消息循环被占用。通过学习MFC代码,作者找到了解决方案,即在HIDE窗口后处理pending的WM_PAINT消息,使得窗口能够立即刷新。这种方法避免了使用定时器带来的复杂性,并可在需要立即刷新界面的场景中应用。
摘要由CSDN通过智能技术生成

一、问题的提出

在某个IM的开发中,我们一直被一个性能问题困扰,由于聊天窗口关闭时需要做许多额外工作,诸如清除数据、反初始化控件、通过SDK通知插件……在这些额外工作中,通知插件是一个同步的操作,目前需要占用较可观的处理时间。于是,这些额外工作导致了关闭聊天窗口时性能低下,窗口不能立即被关闭,在屏幕上迟迟无法消失,严重影响了用户的体验!

   

二、一个蹩足的解决方案

既然无法提高关闭聊天窗口的速度,自然,我们想到了一个看似能解决问题的方案——何不在真正关闭聊天窗口前先HIDE一下它,先让它从屏幕上消失,给用户一个错觉,我们的聊天窗口再在HIDE状态慢慢地打扫干净。

   

我们在关闭时先HIDE窗口,处理一些必要的退出逻辑,再设置一个定时器,在定时器事件中才真正销毁窗口。

   

看起来一切正常,事实上,在前期,通过SDK给插件发消息的处理速度还未变得像现在这样慢的时候,是有效果的!随着开发的推进,这一方案越来越暴露出它的不足,到现在,不幸的是,基本上,它不工作了!我们关闭聊天窗口,虽然执行了HIDE,但它并不立即消失。当把聊天窗口放到主窗口上时,聊天窗口关闭时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值