2008-11-20 71 views
0

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

我需要做些什么才能让视频通过AreaControl显示,虚线矩形覆盖在它上面?有没有办法让VideoControl使用视频来绘制自己,而不是仅仅绘制它的BackColor?

回答

0

最后,这个答案证明是使用AreaControl的Region属性,因为我们不需要部分透明度。

1

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

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

或者,您可能会对Form的TransparencyKey属性有一些好运。将其设置为白色可能会产生所需的效果,但我没有测试过这个效果。

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