【问题标题】:Windows form with a transparent background that can be clicked through具有透明背景的 Windows 窗体,可单击通过
【发布时间】:2017-01-12 22:25:36
【问题描述】:

简介

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

注意事项:

为了避免焦点,我将覆盖CreateParams 属性,如here 所述。

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

问题

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

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

研究

我不太确定要调查什么,所以我会盲目尝试通过覆盖 Window 过程 (WndProc)用于测试相关 Windows 消息的透明表单,如 WM_NCHITESTWM_MOUSEACTIVATE 消息,如下所述:

【问题讨论】:

  • this 你在找什么吗?
  • this one? (阅读答案中的注释部分以启用或禁用点击)
  • @Reza Aghaei 非常感谢,请随时发布答案以提高您的声誉。要走的路是通过覆盖 CreateParams 来设置这些扩展样式并设置表单不透明度级别在 1% 到 99% 不透明度(0.01R 到 0.99R)范围内;我发现使用这种方法,表单不能 100% 不透明,如果你让表单处于默认值(我的意思是 100 % opaque),表单将显示为透明...从字面上看,所有内容都将完全透明,因此表单及其控件将完全消失,但它会在 99% 不透明度下完美运行...这是一件奇怪的事情。
  • 如何让你的表单更短。
  • @ElektroStudios 由于我不确定您的要求,因此我更愿意仅保留评论。随意根据我分享的其他链接发布答案:)

标签: c# .net vb.net winforms sharpdx


【解决方案1】:

您可以通过使用 WinAPI 向透明窗口下方的窗口发送单击(鼠标向上和鼠标向下)消息来完成此操作。

PostMessageA

您需要找到所需点下方的窗口。

WindowFromPoint

您必须相应地转换点击事件的位置,因为消息是根据相对窗口位置而不是绝对屏幕位置处理的。

实际上,我在多年前自动玩 facebook 游戏时非常成功地做到了这一点。

【讨论】:

    【解决方案2】:

    在 Visual Studio 中检查 RAD 设计器。

    • 标签是否停靠填充?
    • 可点击的主窗体在哪里?

    透明颜色在主父级中是点击的,但是,组件仍然会保留点击。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-20
      • 2016-03-23
      • 2016-02-05
      • 2011-05-06
      • 2012-05-03
      • 2012-12-27
      相关资源
      最近更新 更多