如何避免在GUI调整大小瞬时更新?(How to avoid transient updates i

2019-09-19 04:00发布

如果半快速拖动窗口的顶部或左边框,应该注意的是,窗口的另一边振动 - 它被拖累,但随后重新调整,以增加规模。

问题是差了很多,当你有一个动态调整的项目 - 然后一堆你的控制开始滑动和缩放屏幕上,很明显。

有什么办法来防止这些瞬态效应?

例如,也许应对类似消息的特定序列WM_SIZE可以抑制呢? 我不知道。

(这似乎在每一个框架,我见过,甚至普通的Win32发生。只需打开浏览器或东西,拖动其顶部或左边,你会明白我的意思。)

Answer 1:

响应该WM_WINDOWPOSCHANGING消息并设置SWP_NOCOPYBITS标志在flags所述的构件WINDOWPOS结构。



Answer 2:

2018年更新。 该WM_WINDOWPOSCHANGING及相关WM_NCCALCSIZE经常如此述及技巧运作良好XP / Vista / 7的,但不再足够的Win8 / 10,因为航空的调整即面膜,或加重,老问题问题的一个新的层增加。

该在Win8 / 10问题更难解决,因为你的像素的不必要的副本DWM.exe,从系统上所有应用复合像素另一个进程正在发生的事情。

请参阅本Q&A的一个解释是怎么回事,有一些示例代码WM_NCCALCSIZE在XP / Vista / 7的层来解决这个问题(这仍然是那里的Win8 / 10!),和8/10的部分解决方案。

(; BG,BitBlt和DWM赢7-10)如何调整窗口大小时,尤其是拖动左/上边框顺利丑陋的抖动/闪烁/跳跃?



文章来源: How to avoid transient updates in a GUI resize?