在每次鼠标移动事件中,我都在移动窗口。从文档看来,如果移动成功,SetWindowPos将返回非零值。

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

最佳答案



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

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

Bonus reading:

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

10-09 15:43