开发者社区> 长空翱翔> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

C# 透明窗体制作方法比较-性能较差方法

简介: 制作透明窗体办法有好几种,各有优缺点. 我们先来看看C#本身提供的办法 1:通过设置窗体的 TransparencyKey实现     例:窗体中的白色会变成透明 this.BackColor =Color.White; this.TransparencyKey = Color.White; 2:通过设置窗体的 Opacity 实现 例:窗体的透明度为50% this.Opacity = 0.5; 为了更好说明问题,我们先看一个实例。
+关注继续查看

制作透明窗体办法有好几种,各有优缺点.

我们先来看看C#本身提供的办法

1:通过设置窗体的 TransparencyKey实现

    例:窗体中的白色会变成透明


this.BackColor =Color.White; this.TransparencyKey = Color.White;

2:通过设置窗体的 Opacity 实现

例:窗体的透明度为50%


this.Opacity = 0.5;

为了更好说明问题,我们先看一个实例。

(1)新建一个winform应用程序

(2)FormLoad中添加以下代码:

this.BackColor = Color.White;
this.TransparencyKey = Color.White;

(3)加入一个Label,Text = "TransparencyKey Demo",Backcolor = White(或透明)

(4)按F5运行如下图所示

image

粗心的朋友对上图要看仔细了,是不是发现“TransparencyKey Demo”文字带白边?如果你把该窗口拖到一个正在播放的视频上就会看得更清楚。

结论:TransparencyKey只支持透明或不透明,不支持过度色,比如PNG图片中的从不透明到透明的过渡色会显示出讨厌的效果。

再来看看Opacity,我们发现它的显示效果很好,不存在TransparencyKey的过度色问题,但是Opacity设置的是窗体的透明度,和普通窗口相比,只是透明度不同而已,其他没有区别。如果你把通过Opacity制作的透明窗体盖在其他程序的窗口上,你看得到后面的窗口,却没法直接操作后面的窗体。并且该窗口上所有的控件也会产生透明效果,无法单独控制。

最后,我要说的是,不管TransparencyKey的实现,还是Opacity的实现,其实都是对SetLayeredWindowAttributes()函数的封装,只是参数不同而已。

在下一篇文章里,我们将实现更多的效果,但不再讨论SetLayeredWindowAttributes(),因为它的2种功能已被微软封装成TransparencyKey和Opacity,大家只要用就行了。

img_e25d4fb2f8de1caf41a735ec53088516.pngTransForm-demo1.rar

转自:
http://www.cnblogs.com/jxsoft/archive/2011/03/09/1978153.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
web前端学习(三十)——CSS3图像透明/不透明、拼合技术的相关设置
web前端学习(三十)——CSS3图像透明/不透明、拼合技术的相关设置
29 0
bboss session listener实现和配置方法
bboss session listener类似于servlet规范中的session listener接口,本文介绍bboss session listener实现和配置方法 bboss session listener接口: package org.
722 0
Qt之窗体透明
简述 关于窗体透明,经常遇到,下面我们针对常用的透明效果进行讲解: 全透明(主窗体、子窗体均透明) 主窗体透明(子窗体不透明) 子窗体透明(主窗体不透明) 简述 正常状态 全透明 效果 源码 主窗体透明 效果 源码 子窗体透明 更多参考 正常状态 正常状态下,效果如下: 全透明 这里,我们可以透过整个窗体观看到桌面的背景
1492 0
关于quartz cron表达式饭解析验证输出实现部分截图代码
Controller层  @ResponseBody@RequestMapping(value = "/parseCronExpression", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)public IErrorCode parseCronExpression(String exp
1528 0
给hackrf加上1602LCD以及UART(附带固件编译方法)
代码库(在hackrf原代码库基础上只添了两个文件,改了一个文件): https://github.com/JiaoXianjun/hackrf-UART-1602LCD 目的主要是为了帮助想更改调试hackrf固件的人。
1025 0
纯win32实现PNG图片透明窗体
#include   #include     /*  GDI+ startup token */  ULONG_PTR gdiplusStartupToken;    /*  Declare Windows procedure  */  LRESULT CALLBACK Wi...
724 0
+关注
长空翱翔
长期从事Windows和linux应用程序开发,系统开发,驱动程序开发以及基于.net平台的软件开发;擅长面向对象程序设计、数据库设计、应用与开发;
938
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载