2016-07-22 30 views
2

我正在開發一個需要看起來像附加屏幕截圖的項目。在視頻頂部有透明背景的控件

我有一個WinForm的VideoPanelCtl面板上面。面板的句柄被傳遞給實例化的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. 如何在帶有「Video Connection enter image description here Lost」文字(紅色標籤背景)的視頻頂部實現半透明標籤? (請參閱附件)
+0

視頻ovelay高度依賴於視頻控制部分。剩下的最好是通過在控件上繪畫來完成,但是如果這將取決於視頻部分。有時候視頻真的是__overlaying__,而且你不能使用普通的控件或GDI繪圖來繪製它。 – TaW

回答

0

我使用包含Canvas和包含MediaElement和Label(或其他控件)的Canvas的WPF控件來解決此問題。然後將標籤的ZIndex設置得更高以引起可見性。因此,我在標籤具有透明背景的情況下(在MediaElement中)運行視頻時看到可見標籤。