如果半快速地拖动窗口的顶部或左侧边框,您应该注意到窗口的相对边缘会振动 - 它会被拖动,但随后会重新调整以增加尺寸。
当你有动态调整大小的项目时,问题会更加严重 - 然后一大堆你的控件开始滑动并在屏幕上调整大小,非常明显。
有没有办法防止这些瞬态效应?
e.g。也许响应WM_SIZE
之类的消息的特定序列可以抑制这种情况?我不知道。
(它似乎发生在我见过的每个框架中,甚至是简单的Win32。只需打开资源管理器或其他东西并拖动它的顶部或左边缘,你就会看到我的意思。)
答案 0 :(得分:1)
回复WM_WINDOWPOSCHANGING
条消息,并在SWP_NOCOPYBITS
结构的flags
成员中设置WINDOWPOS
标记。
答案 1 :(得分:0)
2018年更新。 SO上经常提到的WM_WINDOWPOSCHANGING
和相关的WM_NCCALCSIZE
技巧在XP / Vista / 7上效果很好,但在Win8 / 10上已经不够用了,因为Aero增加了新的调整大小问题,掩盖了或恶化了,较老的问题。
Win8 / 10问题很难解决,因为DWM.exe中发生了不必要的像素复制,DWM.exe是另一个过程,它会合成系统中所有应用程序的像素。
请参阅此问答,以获取正在发生的情况的说明,并带有一些WM_NCCALCSIZE
的示例代码来解决XP / Vista / 7层(在Win8 / 10中仍然存在)的问题,以及8/10的部分解决方案。