如何设置窗口立即刷新显示

一、引言

遇到一个问题:

清理缓存的时候,当缓存大于200M的时候,用户退出程序会显示一个对话框,这个对话框会提示用户清理缓存,当用户点击了“清理”按钮的时候,则会隐藏按钮并且提示用户“当前正在清理中…”的字样,当清理完毕后,则会显示“清理完成”;而如何让界面及时的显示“正在清理中…”的字样则是问题所在

二、解决

这个问题的根本原因是什么呢?
很简单,就是没有及时通知windows重绘窗口;那如何通知windows重绘窗口呢?是不是只需要设置当前窗口无效就可以了呢?这里参考VC窗口刷新InvalidateRect和UpdateWindow

重画函数InvalidateRect、Invalidate、UpdateWindow、RedrawWindow:
InvalidateRect(部分区域)和Invalidate(整个窗口)仅仅是用来设置无效区域,但是并不重绘窗口。

UpdateWindow检查窗口有无无效区域,如果有,则立即发送一个WM_PAINT消息给窗口并立即重画。
RedrawWindow相当于先调用InvalidateRect,紧接着又调用UpdateWindow,此外还提供了一些前两者没法做到的功能。

如果不调用InvalidateRect就调用UpdateWindow,那么UpdateWindow什么也不做,因为没有无效区域。如果调用InvalidateRect后不调用UpdateWindow,则系统会自动在窗口消息队列为空的时候,系统自动发送一条WM_PAINT消息。

答案已经非常明显了,要向让窗口立即刷新显示,就必须设置无效后立即刷新,否则,windows就在消息队列为空的时候自动刷新。这样问题解决!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值