1

如果您半快速拖动窗口的顶部或左侧边框,您应该注意到窗口的另一边会振动——它被拖动,但随后会重新调整以增加大小。

当您有动态调整大小的项目时,问题会更严重 - 然后您的一堆控件开始在屏幕上滑动和调整大小,非常明显。

有什么办法可以防止这些瞬态影响?

例如,也许对消息的特定响应序列WM_SIZE可以抑制这种情况?我不知道。

(这似乎发生在我见过的每个框架中,甚至是普通的 Win32。只需打开资源管理器或其他东西并拖动其顶部或左侧边缘,您就会明白我的意思。)

4

2 回答 2

1

响应WM_WINDOWPOSCHANGING消息并在结构的成员中设置SWP_NOCOPYBITS标志。flagsWINDOWPOS

于 2012-07-05T22:55:24.627 回答
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 的部分解决方案。

如何在调整窗口大小时平滑难看的抖动/闪烁/跳跃,尤其是拖动左/上边框(Win 7-10;bg、bitblt 和 DWM)?

于 2018-10-26T09:00:42.297 回答