如何使控件透明地覆盖DirectShow视频?

时间:2008-11-20 16:31:28

标签: c# .net directshow

我有一个控件VideoControl,它使用DirectShow显示视频 - 它被设置为IVideoWindow的所有者。我有另一个控件,AreaControl,它应该在视频控件上显示一个虚线矩形。使用SetStyle(ControlStyles.SupportsTransparentBackColor,true)将AreaControl设置为透明。如果我将AreaControl放在任何其他控件上,它会按预期工作,在其后面的控件上显示一个虚线矩形。但是当我将虚线矩形控件放在视频控件上时,AreaControl会被VideoControl的BackColor填充。

我需要做些什么才能让视频通过AreaControl显示,并在其上叠加虚线矩形?有没有办法让VideoControl用视频绘制自己,而不仅仅是绘制BackColor?

2 个答案:

答案 0 :(得分:1)

据我所知,没有办法,你想直接做什么。问题是,执行透明样式的控件。具有此样式属性的控件基本上只是绘制,它背后的内容使它看起来透明。 (实际上它根本不是真的透明)。

我想到的唯一解决方案是使用一个窗口(Form)并将控件放入其中。通过将其Opacity属性设置为小于1.0的值,可以使Form变为透明。值0.0将是完全透明的(读:不可见)。虚线边框应该是全黑的。不透明度为f.e. 0.4它会显示为灰色。

或者,您可能会对表格的TransparencyKey属性感到满意。将其设置为白色可能会产生预期的效果,但我还没有测试过这个效果。

在任何一种情况下,表格都应完全无边框。当视频表单移动时,您可能必须添加一些代码来重新定位表单。

答案 1 :(得分:0)

最后,对此的回答是使用AreaControl的Region属性,因为我们不需要部分透明。