gpt4 book ai didi

c++ - SetWindowPos 是否立即绘制

转载 作者:可可西里 更新时间:2023-11-01 09:52:02 30 4
gpt4 key购买 nike

在每次鼠标移动事件中,我都在移动我的窗口。从文档中可以看出,如果移动成功,SetWindowPos 会返回一个非零值。

我想证实我的推断,即每次 SetWindowPos 返回一个非零值时,移动都已经发生。这意味着,窗口实际上已经在新位置重新绘制,然后函数才返回。函数返回后不久(处理某种消息时)不会发生移动。

最佳答案

I wanted to confirm my inference that every time SetWindowPos returns a non-zero value, the move has already happened. Which means, the window has actually been re-painted

这是错误的假设。成功的移动和非零返回与绘画无关。

API 改变位置和非零返回值确认新值被接受。 API 不 promise ,不将完整的重绘周期作为其执行的一部分。更重要的是,位置、Z 顺序等的变化也可能影响其他窗口的可见性,这又需要重新绘制,而这又必须在各自的线程上发生。重绘是有计划的,它们与 SetWindowPos 返回不同步。 MSDN 上的文档没有任何关于重绘/更新的 promise 。然后从 API 返回零表示您的参数根本不被接受(尤其是无效的窗口句柄)。

Bonus reading :

When you call the Set­Window­Pos function, the window manager updates the window size, position, whatever, and then it goes around repainting the windows that were affected by the operation. By default, the Set­Window­Pos function does a quick-repaint of the windows before returning. After the function returns, the normal WM_PAINT message does the real work of painting the window. The quick-repaint is done so that there is immediate feedback that the window did change its size, position, whatever.

关于c++ - SetWindowPos 是否立即绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36933898/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com