【问题标题】:Why might WS_CLIPCHILDREN be necessary for the display of DirectShow window on XP (but not Vista or Windows 7)?为什么在 XP(而不是 Vista 或 Windows 7)上显示 DirectShow 窗口可能需要 WS_CLIPCHILDREN?
【发布时间】:2010-03-08 03:58:48
【问题描述】:

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

【问题讨论】:

    标签: windows directshow


    【解决方案1】:

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

    WS_CLIPCHILDREN 影响父窗口的绘制。更具体地说,它阻止它在其子项占用的区域中绘图。因此,如果您定期重新绘制父窗口并且未设置 WS_CLIPCHILDREN ,您最终会踩到子窗口的显示...

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

    可能的解决方案

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

    2. 如果你的父窗口有自定义绘制代码,修改它以手动避免在子窗口占用的区域上绘制。

    【讨论】:

      猜你喜欢
      • 2010-12-06
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-20
      • 2010-09-06
      相关资源
      最近更新 更多