绘图问题ShowWindow(hWnd,SW_HIDE)会自动使矩形无效吗?

时间:2010-04-14 18:16:29

标签: winforms mfc hwnd

我遇到了一个问题,我有一个包含子窗口的窗口。子窗口包含另一个子窗口,其中使用Windows Media Player播放视频。每当我在父窗口上调用ShowWindow(hWnd,SW_HIDE)并在整个表面上绘画时,不会覆盖由子窗口(视频正在播放的位置)占用的区域。我使用spy ++并发现在重绘发生之前,未被覆盖的区域被设置为隐藏。

我监视了grand-child窗口的hwnd,它似乎没有收到任何WM_EraseBKGND或WM_NCPAINT消息。这是否意味着它所占用的区域未被无效,因此无法被覆盖?我是winforms的新手。

谢谢!

1 个答案:

答案 0 :(得分:1)

非常不清楚,我必须假设当你隐藏父窗口时,什么都不可见。可能相关的一件事是视频始终显示在硬件覆盖中。这是视频适配器的一项功能,它可以覆盖不同的视频内存块以生成合成图像。因此,如果您隐藏该视频窗口,该窗口的父级将不会获得重新显示消息,因为它实际上并未重叠。

使用Invalidate()方法强制窗口重绘自己。如果可以,请避免P /调用ShowWindow(),Visible属性始终是一个很好的选择。