视频顶部带有透明背景的控件

时间:2016-07-22 15:45:44

标签: c# winforms video panel transparent

我正在开发一个需要看起来像附加屏幕截图的项目。

我有一个带有VideoPanelCtl面板的WinForm。面板的句柄被传递给实例化的VLC组件/控件,导致该面板上显示视频。

我还尝试将另一个面板放在视频面板上端的VideoPanelCtl顶部并使其透明,位于此顶部面板顶部的控件也应具有透明背景,如附带的屏幕截图所示。然而,尽管我使用了一个从面板控件派生的自定义面板并使用bkg重新绘制,但我的方法仍无效(请参阅下面的代码)我在这样的代码中创建的面板很容易被视频遮挡......如果我放了它们上面的控件(按钮和标签)也可能会被遮挡......

我从表单的WinForm的Load处理程序中调用它:

private void InitTopPanel()
    {
        mExtendedPanelTop = new ExtendedPanel();
        mExtendedPanelTop.Opacity = 50; // totally transparent

        videoPanelCtl.Controls.Add(mExtendedPanelTop);
        mExtendedPanelTop.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; 
        mExtendedPanelTop.Dock = System.Windows.Forms.DockStyle.Top;
        mExtendedPanelTop.Location = new System.Drawing.Point(0, 0);
        mExtendedPanelTop.Name = "ExtendedPanelTop";
        mExtendedPanelTop.Size = new System.Drawing.Size(1090, 48);
        mExtendedPanelTop.TabIndex = 0;
        //mExtendedPanelTop.Paint += mExtendedPanelTop_Paint;
    }

public class ExtendedPanel : Panel
{
    private const int WS_EX_TRANSPARENT = 0x20;
    public ExtendedPanel()
    {
        SetStyle(ControlStyles.Opaque, true);
    }

    private int opacity = 50;
    //[DefaultValue(50)]
    public int Opacity
    {
        get
        {
            return this.opacity;
        }
        set
        {
            if (value < 0 || value > 100)
                throw new ArgumentException("value must be between 0 and 100");
            this.opacity = value;
        }
    }
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle = cp.ExStyle | WS_EX_TRANSPARENT;
            return cp;
        }
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        using (var brush = new SolidBrush(Color.FromArgb(this.opacity * 255 / 100, this.BackColor)))
        {
            e.Graphics.FillRectangle(brush, this.ClientRectangle);
        }
        base.OnPaint(e);
    }
}
  1. 如何在位于透明面板上并且具有透明背景的视频上实现控制?
  2. 如何在视频顶部实现半透明标签,文字(红色标签背景)显示&#34;视频连接enter image description here丢失&#34;? (见附件)

1 个答案:

答案 0 :(得分:0)

我通过使用包含Canvas和包含MediaElement和Label(或其他控件)的Canvas的WPF控件来解决它。然后将标签的ZIndex设置得更高以引起可见性。因此,我在运行视频(在MediaElement中)上获得可见标签,其中Label具有透明背景。