我的應用中有幾個分層窗口,它們使用UpdateLayeredWindow()
來處理它們的視覺表示。根據MSDN article on layered windows,「當使用UpdateLayeredWindow()
時,應用程序不需要響應WM_PAINT
或其他繪畫消息。」他們與非分層窗口共享一些相同的消息處理程序,所以我認爲如果目標是分層窗口,我會早於WM_PAINT
處理。在UpdateLayeredWindow調用後,分層窗口仍然接收WM_PAINT消息
當然,這引起了一個重大問題:如果分層窗口的人做得到WM_PAINT
消息,輸入隊列最終會與WM_PAINT
消息的無休止流淹沒。這個最終結果是有道理的,因爲窗口永遠不會被驗證,所以它會一直認爲它需要繪製(我不應該從處理程序返回而沒有驗證或者等等),但是什麼沒有是有道理的,因爲它首先收到了消息,因爲它對使用UpdateLayeredWindow()
的窗口沒有影響。
它甚至不會可靠地發生 - 只是時不時地發生,而不是每次窗口的像素都需要重繪。當分層窗口得到WM_PAINT
消息時,整理恢復爲DefWindowProc()
,但我覺得有些事情正在發生,我不明白。考慮到這個問題很少表現出來,我擔心這可能會隱藏一個更微妙的問題。預計使用UpdateLayeredWindow()
的窗口的行爲仍然會得到偶爾的WM_PAINT
消息?是否重要,只要我正確處理?
附加信息,如果需要:窗口在創建後立即調用UpdateLayeredWindow()
,然後它自己保留(它不會再次調用它,因爲它不會更改)。使用C++和win32 API,不需要MFC。