• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > Winform实现鼠标可穿透的窗体镂空效果

Winform实现鼠标可穿透的窗体镂空效果

作者:ifdog 字体:[增加 减小] 来源:互联网 时间:2017-05-28

ifdog 通过本文主要向大家介绍了c#winform窗体美化,winform窗体间传值,winform窗体固定大小,winform窗体美化,winform窗体等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

今天找到一个名叫LICEcap的录屏软件,录制界面是这样的:

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

  卧槽太NB了我也要做一个!

  根据StackOverflow站的提示(在这里),我们需要使用一个在Windows2000及之后平台可用的,用以实现不规则窗体的分层窗口API (SetLayerWindowAttributes).根据百度我们先需要使用一个名为SetWindowLong的Win32 API来把窗体设定为分层窗体。

  为了在.NET平台中调用Win32 API,我们需要复习下P/Invoke的内容:

1.什么是P/Invoke

  P/Invoke 的全称是Platform Invoke。.是一种在托管平台下使用非托管dll中导出函数的一种调用机制。

2.如何用P/Invoke

  它长这样:

[DllImportAttribute("user32.dll", EntryPoint="SetCursorPos")]
public static extern bool SetCursorPos(int X, int Y) ;
</div>

  依次指明调用的dll名称,导出函数名,然后定义成C#标准的方法就行了。

  所以,我们需要: 打开百度百科,搜索API名称,查看宿主dll,抄来函数原型,按照说明定义需要的常量。

  不,我找到了更方便的办法:打开pinvoke.net,搜索API名称:

  按照里边的C#Signature复制过来,再根据Sample Code改改,就OK了。

  然后在Visual Studio里新建一个Winform项目,在主窗口代码里这样写:

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);
}
</div>

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

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

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

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

   F5运行,效果如图:

   能想到的用处之一就是,包装几个不相关的外部程序为一个整体.

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Winform窗体圆角设计代码
  • C#在winform中实现数据增删改查等功能
  • Winform实现鼠标可穿透的窗体镂空效果
  • WinForm单例窗体用法实例
  • WinForm遍历窗体所有子控件的方法
  • C#使用winform简单导出Excel的方法
  • winform实现拖动文件到窗体上的方法
  • winform创建不规则窗体的方法
  • Winform窗体效果实例分析
  • WinForm实现窗体最大化并遮盖任务栏的方法

相关文章

  • 2017-05-28c#模拟js escape方法的简单实例
  • 2017-05-28C#更改tabControl选项卡颜色的方法
  • 2017-05-28winform绑定快捷键的方法
  • 2017-05-28使用C#开源文件实时监控工具Tail&TailUI介绍
  • 2017-05-28C#基于SQLiteHelper类似SqlHelper类实现存取Sqlite数据库的方法
  • 2017-05-28javascript函数中执行c#函数的方法
  • 2017-05-28c# Rank属性与GetUpperBound方法的深入分析
  • 2017-05-28C#实现在控制台输入密码显示星号的方法
  • 2017-05-28c# 空合并运算符“??”的使用详解
  • 2017-05-28c#使用file.copy实现文件备份示例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • c# 获取CookieContainer的所有cookies函数代码
    • C#中Json的简单处理方法
    • C#实现最完整的文件和目录操作类实例
    • WinForm绘制圆角的方法
    • C#中把日志导出到txt文本的简单实例
    • c#并行任务多种优化方案分享(异步委托)
    • 12306奇葩验证码引发思考之C#实现验证码程序
    • C#检测上传文件真正类型的方法
    • C#实现的算24点游戏算法实例分析
    • C#后台创建控件并获取值的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有