0

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

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

4

2 回答 2

1

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

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

或者,您可能对表单的 TransparencyKey 属性有一些运气。将此设置为白色可能会产生预期的效果,但我还没有测试过这个。

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

于 2008-12-09T14:03:33.650 回答
0

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

于 2009-03-02T11:03:15.183 回答