是否有一个功能会在我更改对话框布局时冻结窗口重绘一段时间?
问问题
7466 次
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 回答