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

来源:互联网 发布:阿里云个人网盘 编辑:程序博客网 时间:2024/06/08 00:54

一、引言

遇到一个问题:

清理缓存的时候,当缓存大于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就在消息队列为空的时候自动刷新。这样问题解决!

原创粉丝点击