我有一个透明的WinForms应用程序和GDI图纸(我用它作为叠加层)。问题是,每当我点击GDI绘图时,焦点就会转到应用程序窗口。我该怎么做?
答案 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);
}