开发环境:.NET Framework版本:4.8
开发工具:Visual Studio 2022
首先创建一个自定义控件,然后设置不绘制背景,交给自定义绘制
public TransparentPanel()
{
InitializeComponent();
SetStyle(ControlStyles.Opaque, true);
}
创建可以设置透明度以及穿透点击的属性
private uint opacity = 50;
[Description("透明度")]
public uint Opacity
{
get
{
return opacity;
}
set
{
if (value > 100) opacity = 100;
else opacity = value;
}
}
[Description("穿透点击")]
public bool ThroughClick { get; set; } = false;
在OnPaint
事件中绘制半透明背景,主要利用ARGB的alpha通道
using (var brush = new SolidBrush(Color.FromArgb((int)opacity * 255 / 100, Color.Black)))
{
e.Graphics.FillRectangle(brush, ClientRectangle);
}
base.OnPaint(e);
在WndProc
中实现穿透点击
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_NCHITTEST && ThroughClick)
{
//在同一线程当前由另一个窗口覆盖的窗口中(消息将发送到同一线程中的基础窗口,直到其中一个窗口返回不是 HTTRANSPARENT 的代码)
m.Result = (IntPtr)HTTRANSPARENT;
}
else
{
base.WndProc(ref m);
}
}
☛☛☛点击此处下载源码☚☚☚