介绍
使用C#或VB.NET,我正在尝试使窗体的背景透明。此窗体将重叠到其他窗口上,它将是最顶层的窗口,因此透明窗体(及其控件)必须具有它们不能接收焦点且必须可以透过点击的能力。这意味着,例如,如果我在透明背景上执行左键单击,则位于Z-order窗口中的背景窗口是必须接收该单击的窗口。
注:
为了避免焦点,我正在覆盖CreateParams
属性,如此处所述。
要使我的窗体透明,我调用Win32 DwmExtendFrameIntoClientArea
函数,还使用SharpDX库,如此处所述。但我认为这实际上与问题本身无关。
问题
下面的图像显示了一个没有透明度的窗体(仅为简化理解),它与文本编辑器程序的窗口重叠。请注意,我的窗体不会接收焦点。问题在于,当我单击窗体的背景(或其控件之一)时,背景上的窗口(文本编辑器窗口)仍然具有焦点,但无法接收单击。
下面是具有透明窗体的相同图像:
研究
我不确定要研究什么,所以我正在盲目地尝试通过覆盖透明表单的窗口过程(WndProc)来寻找一些有用的内容,测试相关的窗口消息,比如像WM_NCHITEST
或者WM_MOUSEACTIVATE
等消息,正如这篇文章所说: