我知道WM_PAINT告诉一个窗口,它需要完全重新绘制自己,但显然这并不是在部分覆盖时发送的消息,然后窗口前面的窗口不再出现,并且它需要重新绘制脏部分。有没有人知道在这种情况下发送了什么消息?发送Windows消息以重新绘制部分遮挡的窗口?
编辑:发现问题:
问题涉及到德尔福控制我写的是一个Delphi窗体上嵌入SDL呈现表面。 SDL有一个API在另一个窗口的HWND上构建渲染器,并将其标记为“外部窗口”。
SDL通常在内部处理WM_PAINT
,所以我最终不得不向SDL的WindowProc添加一些代码,以便将消息转发到外部WindowProc,如果它是外部窗口的话。这有时是有效的,但事实证明,从窗口的数据结构中剥离了外部窗口标志是一个小问题,所以它吞噬了消息而不是将它传递给我的应用程序。一旦我解决了这个问题,我就开始收到WM_PAINT
消息。
所有5个答案都是正确的:WM_PAINT是当您的客户区域的部分或全部需要重新绘制时发送的*消息。在较新版本的Windows上,它并不像以前那样频繁发送,因为Windows为了实现分层窗口和玻璃窗口视觉效果而更积极地缓存桌面 - Windows从内部位图绘制不发送任何类型的消息在那种情况下。 – 2009-11-23 08:52:01