通过透明度实现Visual C#窗体的点击?

14

我制作了一个面板并将其设置为填充屏幕,现在我可以看到它下面的窗口,但我想让它成为可点击的透明面板,这意味着他们可以通过透明度点击文件或查看另一个对象的工具提示。

回复:这可能太显而易见了,但您尝试右键单击并选择“发送到背景”将该面板放到后面了吗?

我的意思是像桌面或火狐浏览器,不是项目内的某物。

2个回答

22
创建一个顶层表单使其透明非常容易。只需使其填满屏幕或所需区域,并定义其具有透明键颜色和相同值的背景颜色。
使其忽略鼠标也很简单,您只需要覆盖 WndProc 并告诉 WM_HITTEST 所有鼠标位置都将被视为透明。从而导致鼠标与窗口下方的任何内容交互。像这样...
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == (int)WM_NCHITTEST)
            m.Result = (IntPtr)HTTRANSPARENT;
        else
            base.WndProc(ref m);
    }

2
放哪个位置?当我把它放在InitializeComponents下面时它不起作用。它甚至没有被调用过。 - Hooch
1
将其放置在窗体类中。顺便说一下,WM_NCHITTEST = 0x84,HTTRANSPARENT = -1。它有效!!! :D - Pedro77
1
有趣的是,在Win8中,使用分层窗口时,这对我没有起作用:悬停会穿过窗口,但点击会激活我的窗口而不是穿过它。相反,有效的方法是设置WS_EX_TRANSPARENT - Roman Starkov
1
同样对我不起作用,win10x64,使用.net 4.5的C# Windows Forms项目。有趣的是,我也没有得到悬停事件。 - omJohn8372

0
一个可能有效的更简单的方法。
步骤1:在(设计)中单击面板。
步骤2:查看属性。
步骤3:将“启用”设置为False。
这使我能够单击面板后面的那个面板。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接