是否有一个函数会冻结窗口重新绘制一段时间,而我会更改对话框的布局?
答案 0 :(得分:15)
如果您发现确实需要执行此操作,则应将窗口WM_SETREDRAW
message发送至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's blog article on the subject非常精彩。
答案 1 :(得分:4)
你应该一举重新定位;使用BeginDeferWindowPos等人
答案 2 :(得分:2)
Windows绘制的方式是系统发布指示您绘制的窗口WM_PAINT
消息。如果您愿意,可以选择忽略这些消息,同时修改布局,然后在完成布局修改后强制执行绘制循环。
但是,我在Windows上编写UI的经验是,您通常不需要采取这些步骤。由于您负责抽取消息队列,如果在修改布局的过程中刷新窗口,那么您必须采取导致消息队列被抽取的操作。
简单地说,在修改布局时停止抽取队列,你的问题就会消失。