需要提前说明一下:

win7系统比较特殊,下面将要说到PictureBox控件的背景色BackColor

1   BackColor设为绿色时,PictureBox,既不被鼠标击穿,也不透明;

2   BackColor设为蓝色时,PictureBox,可以被鼠标击穿,但不透明;

3    BackColor设为黑色时,PictureBox,可以被鼠标击穿,并且透明(满足要求);

但这位老兄https://blog.csdn.net/rediculous/article/details/8877638说:Win7下VS2010编程时,关键色只能是绿色或黑色。

转入正题:

下面的内容均转自:https://www.cnblogs.com/ifdog/p/5940015.html#commentform

注意:我在它的内容上做了一些修改:

这家伙做这个需求的目的源于一个叫LICEcap的录屏软件(这个软件我手上有一个,免安装的),他想做的效果如下

这个炫酷的空心窗口就是镜头,调整好大小,然后对准需要录制的地方按下Record就可以生成gif了。

一      操作控件透明和被鼠标击穿的步骤:

1   在Visual Studio里新建一个Winform项目,并拖入一个PictureBox控件并设置其属性BackColor为Green,如下图:

注意了:BackColor属性的设置,如果在win7下就要注意了,文章开头已经说了

2   在主窗体程序编写如下:

public partial class Form1 : Form{public Form1(){InitializeComponent();this.TopMost = true;SetWindowLong(this.Handle, GWL_EXSTYLE, WS_EX_LAYERED);SetLayeredWindowAttributes(this.Handle, 65280, 255, LWA_COLORKEY);}private const uint WS_EX_LAYERED = 0x80000;private const int GWL_EXSTYLE = -20;private const int LWA_COLORKEY = 1;[DllImport("user32", EntryPoint = "SetWindowLong")]private static extern uint SetWindowLong(IntPtr hwnd,int nIndex,uint dwNewLong);[DllImport("user32", EntryPoint = "SetLayeredWindowAttributes")]private static extern int SetLayeredWindowAttributes(IntPtr hwnd,int crKey,int bAlpha,int dwFlags);}

先使用SetWindowLong将窗口定义为分层窗体,然后调用SetLayeredWindowAttributes方法设置透明。

  其中第二个参数crKey为一个int型的颜色值,转换方式为(int)(0xRRGGBB),本例中Dec(0x00FF00)=65280为绿色。

  第四个参数为透明方式,本例中使用LWA_COLORKEY = 1,表示将该窗口颜色为crKey的部分都设置为透明。

  因此相应地,我们需要在窗口设计器中画一个颜色为绿色的方块。本例中使用了一个PictureBox,并设置了背景颜色。

注意:

1  如果PictureBox的背景色为黑色,则代码SetLayeredWindowAttributes(this.Handle, 65280, 255, LWA_COLORKEY)中的65280改为0

2 如果PictureBox的背景色为蓝色,则代码SetLayeredWindowAttributes(this.Handle, 65280, 255, LWA_COLORKEY)中的65280改为255

3  最终效果如下:

二    整个窗体被鼠标击穿和透明

只需要在窗体程序中加入TransparencyKey = BackColor即可,如下:

        public Form1(){InitializeComponent();TransparencyKey = BackColor;//背景透明(鼠标穿透)}

其它的就不要了

Winform控件镂空、窗体本身镂空和鼠标击穿(录屏会用到)相关推荐

  1. C# winform 控件随窗体放大缩小

    前言: 当winform的窗体放大缩小时,希望窗体内的控件可以随着窗体的放大缩小,等比例的也随之改变,一般的想法是根据窗体的改变比例,将控件也等比例放大缩小,这个方法理论上应该可行,但是按比例计算会有 ...

  2. C#Winform控件随窗体缩放

    实现步骤: 1.在窗体中放一个容器(例如:Panel),并且将容器的Dock属性设置为Fill.窗体中其他控件都放在这个容器中. 2.创建一个窗体类,该类继承于原始窗体类,并在新建的这个窗体类中添加如 ...

  3. winform groupbox控件放到窗体中间位置

    1. 在Form中放一个控件,让其在启动时始终居中 int gLeft = this.Width / 2 - groupControl1.Width / 2; int gTop = this.Heig ...

  4. WinForm—控件TabIndex的作用和设置

    在winform桌面应用程序中常常会遇到用户要求尽量避免使用鼠标的操作,那么我们怎样更好的操作程序呢?这就要用到Tab键来调整控件的焦点从而更方便的操作! 添加一个windows窗体,在窗体上我们可以 ...

  5. WINFORM控件开发 来源:博客园 作者:纶巾客

    (1)开篇 我本人不是专业的控件开发人员,只是在平常的工作中,需要自己开发一些控件.在自己开发WinForm控件的时候,没有太多可以借鉴的资料,只能盯着MSDN使劲看,还好总算有些收获.现在我会把这些 ...

  6. 基于C#的GIS开发20210426之类库同名类、制作winform控件、建立控件之间的关联、自己制作控件、自己控件引入项目、显示磁盘文件夹、磁盘文件与picturebox建立关系、图像拉伸

    C#知识点与控件的制作 一.C#中多个类库中有同名类,区分问题 二.制作最简单的winform控件 1.拖动加载 事件代理 筛选器 2.显示属性.事件,及其修改 常见控件属性介绍 窗体常用的方法 常见 ...

  7. (转)WinForm控件使用文章收藏整理完成

    http://home.cnblogs.com/group/topic/29829.html 对C# WinForm开发系列收集的控件使用方面进行整理, 加入了一些文章, 不断补充充实, 完善这方面. ...

  8. C# WinForm控件、自定义控件整理(大全)

    C# WinForm开发系列 - CheckBox/Button/Label/ProgressBar WinForm下CheckedListBox的数据绑定 Winform 下无闪烁走马灯效果实现 c ...

  9. 在WPF中使用WinForm控件方法

    在WPF中使用WinForm控件方法 原文:在WPF中使用WinForm控件方法 1.      首先添加对如下两个dll文件的引用:WindowsFormsIntegration.dll,Syste ...

最新文章

  1. 转 推荐 33 个 IDEA 最牛配置,写代码太爽了!
  2. rtmp官方协议详解
  3. 知乎上已获千赞,全网独家首发!
  4. 怎样快速学会python_python入门如何更快的学习
  5. win98老机子安装linux,只装了Win98电脑的Linux系统安装和修复
  6. 面向开发人员的 27种Vuejs开发工具
  7. Apache配置文件中的deny和allow的使用
  8. 服务器server2012重置开机密码
  9. 元宇宙与泛娱乐的邂逅:次世代第一CP养成记
  10. Script Identification of Multi-Script Documents: A Survey
  11. 目前常用 心电数据库ECG:MITBIH,AHA,CSE,ST-T,PTB,PAF 详细介绍+下载
  12. Ubuntu 11.10安装QQ2012
  13. 前端开发最基本的3个语言
  14. 玩外服吃鸡手游显示服务器繁忙,玩家纷纷涌入刺激战场国际服导致服务器繁忙,出现BUG锁服!...
  15. 怎样激火一个儒雅随和的程序员呢
  16. 英语四六级翻译10:四大名著
  17. Crazy Engine 3.0(又名盘古引擎)的技术特性
  18. 记录一下uni-app开发中遇到的坑
  19. tensorflow2.X, TensorFlow Addons 版本的匹配选择
  20. 【开篇】STM32F103C8T6 含义、命名规则、GPIO原理以及初始化(参考男神江科协,学习交流用)

热门文章

  1. 截屏录屏工具(免费解压版)
  2. 好用的mac录屏软件推荐:白菜录屏mac中文免费版
  3. 编译原理学习-形式语言 乔姆斯基文法
  4. C语言设计的管理系统,C语言设计订单管理系统探索.doc
  5. 斜体,字体,标题,列表,a链接,描点
  6. 使用kettle导入txt文件
  7. unity如何往下挖地形_如何在unity地形上挖坑?
  8. android开发工程师简历自我评价,软件工程师简历自我评价
  9. 面向对象程序设计方法概述
  10. project2010如何插入子任务?