使用C#或VB.NET。我试图让表单的背景透明化;这个表单将叠加到其他窗口,它将是最顶层的窗口,因此透明表单(及其控件)必须具有不能获得焦点的能力,并且必须可以单击它们,这意味着如果例如我在透明背景上执行左键单击,然后在背景上的窗口(在Z顺序窗口中)是必须接收点击的窗口。
注意:
为了避免焦点,我按照here解释覆盖CreateParams
属性。
为了使我的表单透明,我正在调用Win32 DwmExtendFrameIntoClientArea
函数,并使用SharpDX库解释here。但我认为这对问题本身并不重要。
我将展示我使用图像的意思。下面是与文本编辑器程序窗口重叠的表单图像(没有透明度,只是为了简化理解);请注意,我的表单没有得到关注。好吧,问题是当我点击表格的背景(或其中一个控件)时,背景窗口(文本编辑器窗口)仍然有焦点,但它无法接收到点击。
以上是与上面相同但透明的图片:
我不确定要调查什么,所以我通过覆盖Window程序( WndProc )用于测试相关Windows消息的透明表单,如WM_NCHITEST
或WM_MOUSEACTIVATE
消息,如下所示:
答案 0 :(得分:0)
在Visual Studio中检查RAD设计器。
透明色是主要父级中的单击色,但是,组件仍将保留点击。
答案 1 :(得分:0)
您可以使用WinAPI通过在透明窗口下方的窗口中发送单击(向上和向下鼠标)消息来实现此目的。
您需要在所需位置下方找到一个窗口。
由于消息是根据相对窗口位置而不是绝对屏幕位置处理的,因此您必须相应地转换单击事件的位置。
很多年前,我实际上很成功地完成了自动玩Facebook游戏。