我的应用程序中有几个分层窗口UpdateLayeredWindow()
用于处理它们的视觉表示。根据MSDN 关于分层窗口的文章,“在使用UpdateLayeredWindow()
应用程序时不需要响应WM_PAINT
或其他绘画消息。” 他们共享一些与非分层窗口相同的消息处理程序,所以我想WM_PAINT
如果目标是分层窗口,我会提前从处理中返回。
当然,这导致了一个主要问题:如果其中一个分层窗口确实收到了一条WM_PAINT
消息,那么输入队列最终会被无穷无尽的WM_PAINT
消息流淹没。这个最终结果是有道理的,因为窗口永远不会被验证,所以它会一直认为它需要绘制(我不应该在没有验证或BeginPaint()
ing 等的情况下从处理程序返回),但是什么没有意义这就是它首先收到消息的原因,因为它对正在使用的窗口没有影响UpdateLayeredWindow()
。
它甚至不会可靠地发生——只是偶尔,而不是每次窗口的像素需要重绘。DefWindowProc()
回退到分层窗口收到消息时恢复了理智WM_PAINT
,但我觉得发生了一些我不明白的事情。考虑到这个问题很少出现,我担心这可能只是隐藏了一个更微妙的问题。UpdateLayeredWindow()
使用仍会偶尔收到消息的窗口是否是预期的行为WM_PAINT
?只要我处理得当,这有关系吗?
附加信息,如果需要:窗口UpdateLayeredWindow()
在创建后立即调用,然后它自己留下(它不会再次调用它,因为它不会改变)。使用 C++ 和 win32 API,没有 MFC。