我最近开始探索 Visual Studio。
我试图创建一个幻灯片菜单。更具体地说,当用户按下按钮时,右侧会弹出一个子菜单。为了实现这一目标,我放置了一个Panel
调整自身大小。除了功能之外,我想添加更多设计并使Panel
显得有点褪色。
我知道Panels
在 Visual Studio 中没有不透明度,但我在想是否有人知道如何实现它的方法。我尝试了一个Picture Box
但它也没有不透明度作为属性。我避免使用常规的Menu
反对视觉工作室提供的功能,因为我想添加更多设计。有任何想法吗?
- 创建一个继承自的类Panel https://learn.microsoft.com/en-us/dotnet/framework/winforms/controls/panel-control-windows-forms?WT.mc_id=DT-MVP-5003235.
- Set the 对于构造函数中的控制使用.
如果为 true,则控件将绘制为不透明,并且背景不是
绘。
- 覆盖并设置WS_EX_TRANSPARENT https://learn.microsoft.com/en-us/windows/win32/winmsg/extended-window-styles?WT.mc_id=DT-MVP-5003235它的风格。
指定使用此样式创建的窗口是透明的。
也就是说,窗口下方的任何窗口都不会被
窗户。使用此样式创建的窗口接收 WM_PAINT
仅当其下方的所有同级窗口均已更新后才会显示消息。
- 创建一个
Opacity
属性接受 0 到 100 之间的值,这些值将用作背景的 Alpha 通道。
- 覆盖并使用启用 Alpha 填充背景
Brush
是从创建的BackGroundColor
and Opacity
.
完整代码
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);
}
}
截屏
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)