【问题标题】:Click through transparency for Visual C# Window Forms?单击 Visual C# 窗口窗体的透明度?
【发布时间】:2010-09-11 20:25:50
【问题描述】:

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

RE:这可能太明显了,但是您是否尝试过通过右键单击并选择“发送到后面”将面板发送到后面?

我的意思是桌面或火狐,不是我项目中的东西。

【问题讨论】:

    标签: c# visual-studio forms transparency


    【解决方案1】:

    创建一个透明的顶级表单非常容易。只需让它填满屏幕或所需区域,并将其定义为具有相同值的 TransparenyKey 颜色和 BackColor。

    让它忽略鼠标很简单,您只需要覆盖 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);
        }
    

    【讨论】:

    • 将该代码放在哪里?当我将它放在 InitializeCoponets 下时,它不起作用。我什至不想打一次电话。
    • 放在表单类。顺便说一句,WM_NCHITTEST = 0x84 和 HTTRANSPARENT = -1。有用!!! :D
    • 奇怪的是,这在 Win8 中使用 layered 窗口对我不起作用:悬停会通过,但点击会激活我的窗口而不是通过。取而代之的是set WS_EX_TRANSPARENT
    • 也不适合我,win10x64,使用 .net 4.5 的 C# Windows 窗体项目。有趣的是,我也没有收到悬停事件。
    猜你喜欢
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    相关资源
    最近更新 更多