我的应用程序中有几个分层窗口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。