具有透明背景的Windows窗体,可以单击

问题描述 投票:8回答:1

介绍

使用C#或VB.NET。我正在尝试使表单的背景透明;这个表单将叠加到其他窗口,它将是最顶层的窗口,因此透明表单(及其控件)必须具有不能获得焦点的能力,并且必须可以单击它们,这意味着如果例如我在透明背景上执行左键单击,然后在该背景上的窗口(在Z顺序窗口中)是必须接收单击的窗口。

笔记:

为了避免焦点,我正在重写CreateParams财产,如here所解释。

为了使我的表单透明,我正在调用Win32 DwmExtendFrameIntoClientArea函数,并使用SharpDX库解释here。但我认为这与问题本身无关。

问题

我将展示我使用图像的意思。下面是与文本编辑器程序窗口重叠的表单图像(没有透明度,只是为了简化理解);请注意,我的表单没有获得焦点。好吧,问题是当我点击表单的背景(或其中一个控件)时,背景上的窗口(文本编辑器窗口)仍然具有焦点但它无法接收到点击。

enter image description here

这是上面相同的图像,但是透明的形式:

enter image description here

研究

我不确定要调查什么,所以我试图通过覆盖透明窗体的Window过程(WndProc)来测试相关的窗口消息,例如WM_NCHITEST,试图在试错阶段找到有用的东西。或WM_MOUSEACTIVATE消息如下所述:

c# .net vb.net winforms sharpdx
1个回答
0
投票

在Visual Studio中检查RAD设计器。

  • 标签停靠填充?
  • 可点击的主要表格在哪里?

透明颜色在主要父级中单击,但组件仍将保留点击次数。

© www.soinside.com 2019 - 2024. All rights reserved.