在Win32上,我可以禁用一段时间的窗口绘画吗?

有一个函数会冻结窗口重新绘制一段时间,而我做了我的对话框的布局更改?

如果你发现你真的需要这样做,你应该发送一个WM_SETREDRAW消息的wParam设置为FALSE的窗口。 这表示在更改内容后,不应该重绘窗口。

如果要重新启用绘图,请发送另一个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关于这个主题的博客文章是一个伟大的阅读。

你应该一下子重新定位。 使用BeginDeferWindowPos等。

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

不过,我在Windows上编写UI的经验是,你通常不需要采取这样的步骤。 由于您负责泵送消息队列,因此如果在修改布局的过程中正在刷新窗口,则必须执行导致消息队列被抽取的操作。

简单地说,停止抽取队列,同时修改布局,你的问题将消失。