【发布时间】:2017-01-12 22:25:36
【问题描述】:
简介
使用 C# 或 VB.NET。我正在尝试使表单的背景透明;此表单将与其他窗口重叠,它将是最顶层的窗口,因此透明表单(及其控件)必须具有不能获得焦点并且必须可以单击槽的能力,这意味着例如我在透明背景上执行左键单击,然后该背景上的窗口(在 Z 顺序窗口中)是必须接收单击的窗口。
注意事项:
为了避免焦点,我将覆盖CreateParams 属性,如here 所述。
为了使我的表单透明,我调用 Win32 DwmExtendFrameIntoClientArea 函数并使用 SharpDX 库,如 here 所述。但我认为这与问题本身无关。
问题
我将演示使用图像的含义。下面是一个表格的图像(没有透明度,只是为了简化理解)与文本编辑器程序的窗口重叠;请注意,我的表单没有获得焦点。好吧,问题是当我点击表单的背景(或其控件之一)时,背景上的窗口(文本编辑器窗口)仍然有焦点,但它无法接收点击。
这是与上面相同的图像,但具有透明形式:
研究
我不太确定要调查什么,所以我会盲目尝试通过覆盖 Window 过程 (WndProc)用于测试相关 Windows 消息的透明表单,如 WM_NCHITEST 或 WM_MOUSEACTIVATE 消息,如下所述:
【问题讨论】:
-
this 你在找什么吗?
-
或this one? (阅读答案中的注释部分以启用或禁用点击)
-
@Reza Aghaei 非常感谢,请随时发布答案以提高您的声誉。要走的路是通过覆盖 CreateParams 来设置这些扩展样式并设置表单不透明度级别在 1% 到 99% 不透明度(0.01R 到 0.99R)范围内;我发现使用这种方法,表单不能 100% 不透明,如果你让表单处于默认值(我的意思是 100 % opaque),表单将显示为透明...从字面上看,所有内容都将完全透明,因此表单及其控件将完全消失,但它会在 99% 不透明度下完美运行...这是一件奇怪的事情。
-
如何让你的表单更短。
-
@ElektroStudios 由于我不确定您的要求,因此我更愿意仅保留评论。随意根据我分享的其他链接发布答案:)
标签: c# .net vb.net winforms sharpdx