【发布时间】:2010-04-14 18:16:29
【问题描述】:
我遇到了一个问题,我有一个包含子窗口的窗口。子窗口包含另一个使用 Windows Media Player 播放视频的子窗口。每当我在父窗口上调用 ShowWindow (hWnd, SW_HIDE) 并在整个表面上绘画时,孙子窗口(播放视频的位置)占据的区域不会被覆盖。我使用了 spy++,发现在重绘发生之前,未被覆盖的区域被设置为隐藏。
我监视了子窗口的 hwnd,它似乎没有收到任何 WM_EraseBKGND 或 WM_NCPAINT 消息。这是否意味着它所占据的区域没有被无效,因此不能被绘制?我是winforms的新手。
谢谢!
【问题讨论】:
-
视频窗口可能使用了 DirectX 等技术,它绕过通常的 Windows API 进行屏幕更新。不幸的是,我不知道如何为您提供帮助 - 我希望子窗口能够检测到它被隐藏并自动禁用孙子窗口。
-
经过一番调查,我认为 DirectX 是问题所在,我关闭了桌面合成(我使用的是 Vista),并且没有出现此问题。此外,如果我在播放视频时隐藏窗口(而不是停止和隐藏),问题也不会发生。
-
问题似乎出在 Vista 的 EVR 视频渲染器上,如果正在渲染的视频停止,它所占据的区域似乎没有被绘制。