0

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

我监视了孙窗口的 hwnd,它似乎没有收到任何 WM_EraseBKGND 或 WM_NCPAINT 消息。这是否意味着它所占据的区域没有被无效,因此不能被绘制?我是winforms的新手。

谢谢!

4

1 回答 1

1

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

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

于 2010-04-14T18:31:57.113 回答