簡體   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