我的应用中有几个分层窗口,它们使用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。