创建半透明或透明窗口从透明到鼠标事件,添加到表单的控件除外

2024-04-12

您好,我试图获得像玻璃一样的透明形式,它可以使点击和每个鼠标事件传递到玻璃后面的窗口或项目。

这是我用 Windows 窗体编写的代码:

namespace ClickThroughMe
{
public partial class ClickThroughForm : Form

{
    private int currentWindowStyle;

    public ClickThroughForm()

    {
        InitializeComponent();
    }

    private void ClickThroughForm_Load(object sender, EventArgs e)

    {
        // Grab the Extended Style information for this window and store it.

        currentWindowStyle = WindowLibrary.User32Wrappers.GetWindowLong(this.Handle, User32Wrappers.GWL.ExStyle);

        // Set our window to "transparent", or invisible to the mouse.

        SetFormToTransparent();

        // Make our window the top-most form.

        this.TopMost = true;       
    }

    private void SetFormToTransparent()

    {
        // This creates a new extended style for our window, making it transparent to the mouse.

        User32Wrappers.SetWindowLong(this.Handle, User32Wrappers.GWL.ExStyle,

                                    (User32Wrappers.WS_EX) currentWindowStyle | 

                                     User32Wrappers.WS_EX.Layered |

                                     User32Wrappers.WS_EX.Transparent);
    }
  }
}

这段代码的问题是整个窗口通过不透明度变得透明,但按钮或滑块等控件不保留可点击性。

So I need help to让它变得更好。

1)保留控件完全不透明(不需要但很重要)

2)保留控件的可点击性和可操作性 (MUST)

我接受任何解决方案,甚至将项目更改为 WPF


尝试设置Form.TransparencyKey 属性 http://msdn.microsoft.com/en-us/library/system.windows.forms.form.transparencykey.aspxClickThroughForm 的值以匹配表单 BackColor。

当 ClickThroughForm 在另一个窗体上设置为 TopMost 时,我对此进行了测试,我可以触发 Button 事件,并且 TrackBar 控件似乎可以正常工作。

Note:使用此方法,由于其透明度,ClickThroughForm 无法捕获鼠标事件,如果这是一个要求,那么您可以忽略此答案。

ClickThroughForm 类

public class ClickThroughForm : Form
{
    private System.ComponentModel.IContainer components = null;

    public ClickThroughForm()
    {
        InitializeComponent();
    }

    private void InitializeComponent()
    {
        this.SuspendLayout();
        // 
        // ClickThroughForm
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(300, 300);
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        this.Name = "ClickThroughForm";
        this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
        this.Text = "ClickThroughForm";

        //Set the TransparencyKey to match the default BackColor of the Form
        this.TransparencyKey = System.Drawing.SystemColors.Control;

        this.ResumeLayout(false);

    }

    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }
}

希望这对您有帮助。

我注意到您是新用户,如果您在网站上提出的此问题或任何其他问题提供了您正在寻找的答案,请记住接受答案。

请参阅以下内容了解更多信息:接受答案如何运作? http://msdn.microsoft.com/en-us/library/system.windows.forms.form.transparencykey.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建半透明或透明窗口从透明到鼠标事件,添加到表单的控件除外 的相关文章

  • 具有不同大小结构的结构数组的 malloc()

    如果每个结构都包含一个大小不同的字符串数组 那么如何正确地 malloc 一个结构数组 因此每个结构可能有不同的大小 并且不可能 realloc 结构体数量 sizeof 结构体名称 after malloc 初始大小 sizeof 结构名
  • 通过增加索引之和来生成排序组合的有效方法

    对于启发式算法 我需要一个接一个地评估特定集合的组合 直到达到停止标准 由于它们很多 目前我正在使用以下内存高效迭代器块生成它们 受到 python 的启发 itertools combinations http docs python o
  • Subversion 和 Visual Studio 项目的最佳实践

    我最近开始在 Visual Studio 中处理各种 C 项目 作为大型系统计划的一部分 该系统将用于替换我们当前的系统 该系统是由用 C 和 Perl 编写的各种程序和脚本拼凑而成的 我现在正在进行的项目已经达到了颠覆的临界点 我想知道什
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • System.IO.IOException:由于意外>数据包格式,握手失败?

    有谁知道这意味着什么 System Net WebException 底层连接已关闭 发送时发生意外错误 gt System IO IOException 由于意外 握手失败 数据包格式 在 System Net Security SslS
  • ASP.NET Core 与现有的 IoC 容器和环境?

    我想运行ASP NET 核心网络堆栈以及MVC在已托管现有应用程序的 Windows 服务环境中 以便为其提供前端 该应用程序使用 Autofac 来处理 DI 问题 这很好 因为它已经有一个扩展Microsoft Extensions D
  • SSL/TLS/HTTPS 站点在 C#/.NET WebBrowser 控件中非常慢,但在 Internet Explorer 中则很好

    背景 我正在修改自动维基浏览器 http en wikipedia org wiki Wikipedia AutoWikiBrowser使用托管在安全服务器上的 MediaWiki 站点 我允许用户通过 C 应用程序中的 WebBrowse
  • HttpWebRequest vs Webclient(特殊场景)

    我知道这个问题之前已经回答过thread https stackoverflow com questions 1694388 webclient vs httpwebrequest httpwebresponse 但我似乎找不到详细信息 在
  • TcpClient 在异步读取期间断开连接

    我有几个关于完成 tcp 连接的问题 客户端使用 Tcp 连接到我的服务器 在接受客户端后listener BeginAcceptTcpClient ConnectionEstabilishedCallback null 我开始阅读netw
  • 2D morton 码编码/解码 64 位

    如何将给定 x y 的莫顿代码 z 顺序 编码 解码为 32 位无符号整数 生成 64 位莫顿代码 反之亦然 我确实有 xy2d 和 d2xy 但仅适用于 16 位宽的坐标 产生 32 位莫顿数 在网上查了很多 但没有找到 请帮忙 如果您可
  • C++ 插件的“最适合”动态类型匹配

    我有一个几乎所有东西都是插件的架构 该架构以图形用户界面为基础 其中每个插件都由一个 表面 即用户可以通过其与插件交互的 UI 控件 表示 这些表面也是插件 每当添加新插件时 瘦主机都会自动确定哪个可用表面与其最匹配的 UI 如何在 C 中
  • C++ 错误 - “成员初始值设定项表达式列表被视为复合表达式”

    我收到一个我不熟悉的 C 编译器错误 可能是一个非常愚蠢的错误 但我不能完全指出它 Error test cpp 27 error member initializer expression list treated as compound
  • C++11 动态线程池

    最近 我一直在尝试寻找一个用于线程并发任务的库 理想情况下 是一个在线程上调用函数的简单接口 任何时候都有 n 个线程 有些线程比其他线程完成得更快 并且到达的时间不同 首先我尝试了 Rx 它在 C 中非常棒 我还研究了 Blocks 和
  • C# 中的常量和只读? [复制]

    这个问题在这里已经有答案了 可能的重复 const 和 readonly 之间有什么区别 https stackoverflow com questions 55984 what is the difference between cons
  • 如何随着分辨率的变化自动调整大小和调整表单控件

    我注意到某些应用程序会更改控件的位置以尽可能适应当前的分辨率 例如 如果窗口最大化 则控件的设置方式应使整个 GUI 看起来平衡 是否可以使用 C 在 Visual studio 2010 中制作或实现此功能 Use Dock http m
  • 为什么要在 C++ 中使用 typedef?

    可以说我有 set
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 使用 iTextSharp 5.3.3 和 USB 令牌签署 PDF

    我是 iTextSharp 和 StackOverFlow 的新手 我正在尝试使用外部 USB 令牌在 C 中签署 PDF 我尝试使用从互联网上挖掘的以下代码 Org BouncyCastle X509 X509CertificatePar
  • 如何引用解决方案之外的项目?

    我有一个 Visual Studio C 解决方案 其中包含一些项目 其中一个项目需要引用另一个不属于解决方案的项目 一开始我引用了dll

随机推荐

  • Java事件派发线程讲解

    我最近开始学习和探索 Java 中 GUI 编程的基础知识 编程已经有一段时间了 我只做过后端工作或工作 因此我最接近的用户界面是命令控制台 我知道这很尴尬 我正在使用 Swing 据我所知 这意味着我也在使用 AWT 我的问题是基于这段代
  • MySQL SELECT 中的条件 SELECT

    Table id price is active 1 20 99 0 2 10 99 1 3 30 99 0 4 15 99 1 5 35 99 1 我试图选择 is active 等于 1 的所有行的 COUNT 所以我使用了这个简单的查
  • 如何在Python中的多类分类问题上获取每个类的SHAP值

    我有以下数据框 import pandas as pd import random import xgboost import shap foo pd DataFrame id 1 2 3 4 5 6 7 8 9 10 var1 rando
  • 在 .ts 文件中使用 ngx-translate

    我想在侧菜单标题中使用翻译 我读过本教程 https ionicthemes com tutorials about internationalize and localize your ionic2 app with ngtranslat
  • 添加填充到谷歌地图bounds.contains()

    我有一个侧边栏 显示谷歌地图当前地图视图中的标记名称 侧边栏内容随着地图的移动而变化 google maps event addListener map bounds changed function document getElement
  • 相对路径如何在 Access 2007 中指定链接表?

    我有一个 Access 数据库的前端和后端 前端引用链接表 我需要进行相对链接而不是显式链接 即 database 被引用而不是 address database 是否可以这样做 或者我必须指定绝对路径 我已经尝试过上面的一些答案 尤其是马
  • 在 IE 8 中加速“:not”jQuery CSS 选择器?

    我在 IE 中遇到性能问题 并且正在执行一个包含以下选择器的大循环 td not some cell 在 IE 中是否有更有效的方法来做到这一点 IE8不支持 not选择器本身 所以如果您使用像 jQuery 内置的 Sizzle 这样的纯
  • 基于 Rails cookie 的会话:将会话范围与过期时间混合

    所以我以不同的方式问了这个问题here https stackoverflow com questions 14712968 session expiration not working in rails 14713390 14713390
  • 冒泡排序中的预期交换次数[重复]

    这个问题在这里已经有答案了 可能的重复 冒泡排序中的交换次数 https stackoverflow com questions 11331314 number of swaps in bubble sort 问题简述如下 给定一个数组 A
  • 调用网页的任务计划尽可能简单

    我有一个网页 它进行一些数据库更新 例如http www mysite com updates asp http www mysite com updates asp 我希望每天 09 00 自动调用此页面 我知道如何在IIS中安排任务 但
  • Azure AAD - 受众无效

    我创建了一个使用 azure Active Directory 保护的 Web api 我现在需要对此进行测试并尝试将 fiddler 与授权标头一起使用 我正在尝试使用以下代码生成令牌 Target obj Target cmbTarge
  • 如何处理无序拨打的“接听”电话?

    我有一个模拟销售漏斗的 WF4 服务 它的工作原理是从 注册 接收呼叫开始 之后 有 10 个类似的阶段 每个阶段包含 2 个接收 在当前阶段验证收到的数据之前 您无法前进到某个阶段 但我不确定的是 即使我的客户端应用程序不允许这样做 我怎
  • 如何使用实体框架使用序列在 Oracle 中插入标识值

    在 Oracle 数据库中 ID 列定义为数字 以及表的相应序列 如何确保 ID 列获取序列中的下一个值 using var db new MyOracleDb var user new User first name Abe last n
  • 服务器在渲染之前不会等到http调用完成 - Angular 4服务器端渲染

    我已经继续实现了角度通用 并且能够通过服务器端渲染来渲染 html 的静态部分 我面临的问题是 正在进行 API 调用 并且服务器正在渲染 html 而无需等待 http 调用完成 因此 我的模板依赖于从 api 调用获取的数据的部分不会在
  • 使用异步等待时无法获取对象的属性

    我正在使用 Node js 和 mongoose 但这个问题纯粹是关于async await部分 我写了这段代码 并且它有效 router get applications id async req res next gt var post
  • Hibernate 中的小写注释

    hibernate中有没有办法将实体的列注释为字符串小写 我的意思是例如 Entity public class User Column private String username 我希望休眠在所有未绑定到特定数据库的查询中将用户名转换
  • 如何在 gdb 中附加进程

    我有一个简单的 C 程序 它分叉一个进程 然后运行一个可执行文件 我想将子进程附加到 gdb 我在控制台中运行主程序并打开另一个控制台来查找子进程的 pid 然后使用以下命令启动 gdb gdb attach 12271 where 122
  • 不需要的空白导致列扭曲

    我正在尝试从间隔 非制表符 的 txt 文件导入化学品列表 NO FORMULA NAME CAS No A B C D TMIN TMAX code ngas TMIN ngas 25 C ngas TMAX 1 CBrClF2 brom
  • 如何在函数声明中声明 C++ mem_fn(member_function) ?

    我理解将成员函数的地址传递到类之外的基本问题 我感觉 mem fn 可能是解决方案 但我在具体细节上遇到了麻烦 我在类 p 中有一个成员函数 当前声明为 typedef void valNamedFlagsCallback const in
  • 创建半透明或透明窗口从透明到鼠标事件,添加到表单的控件除外

    您好 我试图获得像玻璃一样的透明形式 它可以使点击和每个鼠标事件传递到玻璃后面的窗口或项目 这是我用 Windows 窗体编写的代码 namespace ClickThroughMe public partial class ClickTh