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