6

是否有一个功能会在我更改对话框布局时冻结窗口重绘一段时间?

4

3 回答 3

17

如果您发现您确实需要这样做,您应该向窗口发送一条设置为 FALSE的WM_SETREDRAW消息。wParam这表明窗口在其内容更改后不应重绘。

当您想重新启用绘图时,发送另WM_SETREDRAW一条消息,这次wParam设置为 TRUE。

示例代码:

// Disable window updates
SendMessage(hWnd, WM_SETREDRAW, FALSE, 0);

// Perform your layout here
// ...

// Re-enable window updates
SendMessage(hWnd, WM_SETREDRAW, TRUE, 0);

有关更多信息,Raymond Chen 关于该主题的博客文章非常适合阅读。

于 2011-02-15T09:14:49.263 回答
4

您应该一口气完成重新定位;使用BeginDeferWindowPos等。

于 2011-02-15T09:09:08.987 回答
2

Windows 绘画的方式是系统发布您的窗口WM_PAINT消息,指示您绘画。如果您愿意,您可以选择在修改布局时忽略这些消息,然后在完成修改布局后强制执行绘制周期。

但是,我在 Windows 上编写 UI 的经验是,您通常不需要采取这些步骤。由于您负责抽取消息队列,如果在修改布局的过程中刷新窗口,那么您必须采取导致消息队列被抽取的操作。

简而言之,在修改布局的同时停止排队,你的问题就会消失。

于 2011-02-15T09:08:56.407 回答