为什么在XP上显示DirectShow窗口(但不是Vista或Windows 7)需要WS_CLIPCHILDREN?

时间:2010-03-08 03:58:48

标签: windows directshow

我写了一个在窗口上播放MPEG视频的程序(当然,DirectShow将打开自己的窗口作为该窗口的子窗口)。在Windows Vista和7上,该程序工作正常。但是在XP上,视频只有在我在外窗口设置WS_CLIPCHILDREN样式时才可见(即不是DirectShow样式)。这是XP中的错误还是Vista中的某些模型更改?

1 个答案:

答案 0 :(得分:6)

实际上,这听起来像是代码中的错误......

WS_CLIPCHILDREN会影响父窗口的绘制。更具体地说,它可以防止它在其子女所占据的区域中绘制。因此,如果您定期重新绘制父级并且WS_CLIPCHILDREN 未设置,则最终会在子窗口的显示上踩踏...

至于为什么这可能会影响XP而不是Vista或Win7,那么......这只是猜测,但XP上的许多视频播放器都使用了大多数名为“overlays”的视频卡提供的功能:基本上,窗口用键颜色填充,然后由硬件识别,表示屏幕上将显示视频的区域。由于窗口本身不会经常重新绘制(它最初需要填充关键颜色,并且在调整大小时,但不会重新绘制视频中的每一帧),允许父级绘制它可能会严重搞乱你的输出!

潜在解决方案

  1. 在父窗口中使用WS_CLIPCHILDREN。无论如何,这几乎总是一个好主意。

  2. 如果您的父窗口有自定义绘制代码,请将其修改为手动避免绘制儿童占用的区域。