具有透明背景的Windows窗体无法单击

使用c#/ windows表单。 尝试使表单的背景透明,而不会失去接收点击的能力。

  1. this.Opacity使整个表单透明(不仅仅是背景

  2. BackColor = Color.Red;
    TransparencyKey = BackColor;

使表单的背景透明,并点击通过。 我希望表单透明,但它应该能够获得点击

怎么样?

你需要处理WM_NCHITTEST。 请注意,在下面的代码段中,m.lParam包含相对于屏幕左上角的鼠标位置的压缩X和Y坐标,您需要检查该位置是否与透明区域匹配。

在这个例子中,我正在返回HTCAPTION,这意味着该区域的行为类似于窗口的标题,即用户可以通过单击并拖动此位置来拖动窗口。 请在此处查看可以返回的其他值以及它们的含义

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; } }