深度理解:关于WM_SETREDRAW消息的理解

深度理解:关于WM_SETREDRAW消息的理解

作者:BlogUpdater |  时间:2017-08-30 |  浏览:7020 |  评论已关闭 条评论

在解决一个界面控件闪烁的问题之后,我对WM_SETREDRAW这一消息有了更深的理解。

此消息的作用:
这个消息的主要作用在于:它允许或者禁止窗口重绘。通常我们不必要通过发送消息的方式使用它,而是使用函数SetRedraw,如果指定参数FALSE,则窗口重绘被禁止,否则,窗口重绘被允许。
那么窗口重绘被禁止是什么意思?
窗口的绘制一般在WM_PAINT消息中处理,如果窗口重绘被禁止,则WM_PAINT消息不会被处理。这就是SetRedraw(FALSE)调用所起到的效果。
当调用SetRedraw(TRUE)后,窗口重绘被启用,WM_PAINT消息得到正常处理,窗口又开始得到绘制了,并且,这一绘制工作不仅仅是无效区域的重绘,而是整个窗口的重绘。

此消息的应用场景:
通常当我们对一个窗口有大量界面更新时,这个消息可以避免频繁界面更新带来的闪烁。首先调用SetRedraw(FALSE)禁止窗口更新,然后执行窗口界面更新,最后,调用SetRedraw(TRUE)完成一次性窗口重绘。
例如:
m_listCtrl.SetRedraw(FALSE);
m_listCtrl.AddItem(“1”);
m_listCtrl.AddItem(“2”);

m_listCtrl.AddItem(“n”);
m_listCtrl.SetRedraw(TRUE);

标签:

评论已关闭。