使GDI绘图无法点击

时间:2015-08-25 16:43:09

标签: c# winforms gdi

我有一个透明的WinForms应用程序和GDI图纸(我用它作为叠加层)。问题是,每当我点击GDI绘图时,焦点就会转到应用程序窗口。我该怎么做?

2 个答案:

答案 0 :(得分:1)

您需要使用正确颜色作为TransparencyKey

一切使Form 可点击Color.Fuchsia除外。

一个不可解释的,更不用说有记录的功能,可能已经开始作为一个错误,但现在,希望永远和永远,让我们从可点击的透明形式切换到我们可以绘制和不可点击的,我们可以通过它与背景项进行交互..

// click-through:
this.BackColor = Color.Fuchsia;  
this.TransparencyKey = this.BackColor;

// clickable:
this.BackColor = Color.FromArgb(255, 147, 151, 162);  // any non-fuchsia color
this.TransparencyKey = this.BackColor;

答案 1 :(得分:1)

只要你正确实现了叠加(一个拥有的窗口显示的显示(所有者)重载,example),那么它只需要一些复制/粘贴代码。 Windows会询问您单击窗口的哪个部分,您可以回答“它是透明的”。因此,它将继续寻找任何感兴趣的人,其父窗口是下一个。

像这样:

    protected override void WndProc(ref Message m) {
        const int WM_NCHITTEST = 0x84;
        const int HTTRANSPARENT = -1;
        if (m.Msg == WM_NCHITTEST) m.Result = new IntPtr(HTTRANSPARENT);
        else base.WndProc(ref m);
    }