在每次鼠标移动事件中,我都在移动窗口。从文档看来,如果移动成功,SetWindowPos
将返回非零值。
我想证实一下我的推论,即每次SetWindowPos
返回一个非零值时,都已经发生了移动。这意味着窗口实际上已在新位置重新绘制,然后函数才返回。在函数返回后的一段时间(处理某种消息时)不会发生移动。
最佳答案
这是错误的假设。成功的举动和非零返回与绘画无关。
API更改位置,并且返回的值非零,确认已接受新值。该API不 promise ,也不执行完整的重画周期作为其执行的一部分。更重要的是,位置,Z顺序等的更改也可能会影响其他窗口的可见性,这又需要重新粉刷,而粉刷又必须发生在相应的线程上。重绘是计划的,它们不与SetWindowPos
return同步。 MSDN上的文档对重绘/更新没有任何保证。然后,从API返回零表示您的参数根本不被接受(尤其是无效的窗口句柄)。
Bonus reading:
关于c++ - SetWindowPos立即绘制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36933898/