【发布时间】:2009-09-16 23:43:26
【问题描述】:
使用 c#/windows 窗体。尝试使表单的背景透明,同时又不会失去接收点击的能力。
this.Opacity 使整个表单透明(不仅仅是背景
BackColor = Color.Red;
TransparencyKey = 背景色;
使表单的背景透明并且可以点击。我希望表单是透明的,但它应该能够接收点击
怎么做?
【问题讨论】:
标签: c# winforms transparency
使用 c#/windows 窗体。尝试使表单的背景透明,同时又不会失去接收点击的能力。
this.Opacity 使整个表单透明(不仅仅是背景
BackColor = Color.Red;
TransparencyKey = 背景色;
使表单的背景透明并且可以点击。我希望表单是透明的,但它应该能够接收点击
怎么做?
【问题讨论】:
标签: c# winforms transparency
您需要处理 WM_NCHITTEST。请注意,在下面的 sn-p 中,m.lParam 包含相对于屏幕左上角的鼠标位置的打包 X 和 Y 坐标,您需要检查该位置是否与您的透明区域匹配。
在此示例中,我返回 HTCAPTION,这意味着该区域的行为类似于窗口的标题,即用户将能够通过单击并拖动此位置来拖动窗口。请参阅here 可以返回哪些其他值以及它们的含义
protected override void WndProc(ref Message m) {
switch (m.Msg) {
case 0x84: // this is WM_NCHITTEST
base.WndProc(ref m);
if ((/*m.LParam.ToInt32() >> 16 and m.LParam.ToInt32() & 0xffff fit in your transparen region*/)
&& m.Result.ToInt32() == 1) {
m.Result = new IntPtr(2); // HTCAPTION
}
break;
default:
base.WndProc(ref m);
break;
}
}
【讨论】: