2016-07-22 11 views
2

Я разрабатываю проект, который должен выглядеть как прикрепленный скриншот.Элементы управления с прозрачным фоном поверх видео

У меня есть WinForm с панелью VideoPanelCtl поверх нее. Рукоятка панели передается в компонент VLC, созданный на основе VLC, который приводит к отображению видео на этой панели.

Я также попытался поставить еще одну панель поверх VideoPanelCtl в верхнем конце панели видео и сделать ее прозрачной, а элементы управления, которые сидят поверх этой верхней панели, также должны иметь прозрачный фон, как показано на прилагаемом скриншоте , Тем не менее, мой подход не работал, несмотря на то, что я использовал настраиваемую панель из панели управления с перерисованием bkg (см. Код ниже). Панель, которую я создавала в коде вроде этого, просто была закрыта видео ... и если бы я поставил управления на нем (кнопки и надписи), они, вероятно, будут тусклыми, тоже ...

я называю это из обработчика нагрузки формы в части WinForm:

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. Как достичь полупрозрачной этикетки поверх видео с текстом (красный логотип на этикетке), который гласит: «Видеосвязь enter image description here Lost»? (см. прилагаемый)
+0

Видео ovelay сильно зависит от части управления видео. Остальное лучше всего сделать, нарисовав на элементе управления, но если это будет работать, это зависит от части видео. Когда-то видео на самом деле __вершило __ все, и вы просто не можете использовать регулярные элементы управления или чертеж GDI, чтобы нарисовать его. – TaW

ответ

0

Я разрешил его с помощью элемента управления WPF, который содержит холст и холст, содержащий MediaElement и Label (или другие элементы управления). Затем установите значение ZIndex of Label выше, чтобы вызвать видимость. Таким образом, я получаю видимую метку при запуске видео (внутри MediaElement) с ярлыком, имеющим прозрачный фон.