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

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

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

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

    如何?

有帮助吗?

解决方案

您需要处理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;
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top