使GDI绘图不可点击

本文关键字:GDI 绘图 | 更新日期: 2023-09-27 18:09:58

我有一个透明的WinForms应用程序与GDI图纸(我使用它作为覆盖)。问题是,每当我点击GDI绘图时,焦点就会转到应用程序窗口。我怎么把它变成?

使GDI绘图不可点击

您需要使用颜色作为TransparencyKey !

使得Form 除了Color.Fuchsia

一个不能真正解释的,更不用说记录的,"功能",可能已经开始作为一个bug,但现在,希望永远永远,让我们从可点击的透明表单切换到我们可以绘制和不可点击的,通过我们可以与背景项目进行交互…

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

只要你正确地实现了覆盖(一个拥有的窗口显示与显示(所有者)过载,例如),那么它只需要一小块复制/粘贴代码。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);
    }