繁体   English   中英

SetWindowPos立即绘制

[英]Does SetWindowPos paint immediately

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

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

我想确认一下我的推论,即每次SetWindowPos返回一个非零值时,都已经发生了移动。 这意味着该窗口实际上已被重新绘制

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

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

奖励阅读

当您调用SetWindowPos函数时,窗口管理器会更新窗口大小,位置等信息,然后重新绘制受操作影响的窗口。 默认情况下,SetWindowPos函数在返回之前对窗口进行快速重绘。 函数返回后,正常的WM_PAINT消息完成了绘制窗口的实际工作。 快速重绘完成后,可以立即得到反馈,表明窗口确实改变了其大小,位置等。

SetWindowPos完成工作后返回imidialty。

但是主要绘画将推迟到窗口接收到WM_NCPAINT和WN_PAINT为止。 从我的经验来看,我可以说对框架的更改通常是由SetWindowPos直接绘制的。

如果要完全重绘窗口,请在调用SetWindowPos之后调用UpdateWindow或RedrawWindow(带有适当的标志)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM