【C#界面】完美实现无毛边异形窗体

威廉乔克斯_汀 2012-12-24 03:01:41
加精
【C#界面】完美实现无毛边异形窗体


实现效果图1:

实现效果图2:

实现效果图3:


异形窗体的实现思路

(一)、采用UpdateLayeredWindow这个api函数基于Png图alpha通道绘制异形窗口
优点:真正意义上的异形窗口
缺点:用了WS_EX_LAYERED后当前窗体不处理paint事件,所以窗体上无法绘制控件,但这个控件确存在,而且可以响应事件

解决无法绘制控件方法:

1、思路:

采用双层窗口:底层背景窗口层与顶层控件层,用控件层Show()背景层,同时处理窗体的窗口移动事件,让另外一个窗体同步移动或者做其它事情。

2、实现:

底层背景层:采用UpdateLayeredWindow这个api函数基于带Alpha通道的Png图绘制
顶层控件层:
方法一:采用无边框窗口,把窗口背景颜色BackColor设置一个不常用颜色例如:ff00ff颜色,且把窗口TransparencyKey颜色属性设跟背景色BackColor一样(意义:去除带背景色的区域从而显示后面背景层)
方法二:采用无边框窗口,把窗口背景设为背景层对应位置的位图,给人一种透明的效果,但是编辑会有所限制。(SkinWhetherTank属性可以切换这两种透明模式)

优点:可以解决显示控件的问题,不影响控件的使用
缺点:方法一会让部分控件有毛边,方法二会让窗体编辑受限制。(缺点有待解决,望高手指点)

属性:
GradientTime:控件层渐变特效时长(越小越快)。
MainPosition:窗口在绘图层位置。
SkinBack:设置或获取绘图层窗口背景。
SkinMobile:窗体是否可以移动。
SkinOpacity:设置或获取绘图层窗口透明度(0-255)。
SkinShowInTaskbar:绘图层是否出现在Windows任务栏中。
SkinSize:设置或获取绘图层窗口大小。
SkinTrankColor:绘图层需要透明的颜色。
SkinWhetherTank:绘图层是否开启位图仿透明 注意(SkinOpacity < 255时,此属性为False可达到背景透明,控件不透明的效果。)。

源码共享:
源码上传中
...全文
15274 155 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
155 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzyhost 2014-04-25
  • 打赏
  • 举报
回复
一,你如何保持控件层永远在上面? 二,如何防止其它程序窗口跑到这两层中间?
lcjSharp 2013-09-21
  • 打赏
  • 举报
回复
jiqirenzhu 2013-08-21
  • 打赏
  • 举报
回复
期待楼主源码
zzz1090891028 2013-08-12
  • 打赏
  • 举报
回复
u010885300 2013-05-29
  • 打赏
  • 举报
回复
不错不错!!!
clz_boy 2013-05-12
  • 打赏
  • 举报
回复
双层窗体不大好 期待更好的方法
CUIT_IGIS 2013-04-28
  • 打赏
  • 举报
回复
咦~~~不得不说csdn的帖子做得很差啊
CUIT_IGIS 2013-04-28
  • 打赏
  • 举报
回复
我自己也模仿了一个,但是很多地方不好 http://user.qzone.qq.com/397279456/infocenter#!app=2&via=QZ.HashRefresh&pos=1366211686
起来嗨 2013-03-14
  • 打赏
  • 举报
回复
可恶啊,没有分下不了
七月风铃响 2013-01-04
  • 打赏
  • 举报
回复
很好很强大~
  • 打赏
  • 举报
回复
学习了。。。
Duco 2013-01-03
  • 打赏
  • 举报
回复
好东西 收藏
  • 打赏
  • 举报
回复
引用 142 楼 ben_hv 的回复:
10年的时候做过。 用C++; 同样是调用API,所以基本是一摸一样了。 那时候搜索到的方法,就是这些了。 那些方法的日期,好像是06年之前的。 到了13年,还是没有变化。 真的需要查询的问题,却只有英文才有解答方法。 我们大家都是懒人啊,就没人写一些新的东西了。 新人倒是都很有热情。
我也想有新方法啊,可是没新思路。
ben_hv 2013-01-03
  • 打赏
  • 举报
回复
10年的时候做过。 用C++; 同样是调用API,所以基本是一摸一样了。 那时候搜索到的方法,就是这些了。 那些方法的日期,好像是06年之前的。 到了13年,还是没有变化。 真的需要查询的问题,却只有英文才有解答方法。 我们大家都是懒人啊,就没人写一些新的东西了。 新人倒是都很有热情。
zhouwei716716 2013-01-02
  • 打赏
  • 举报
回复
好的!!!赞一个!!!
AQINGHENRY 2012-12-31
  • 打赏
  • 举报
回复
祝各位csdn的朋友2013年步步高升,财源滚滚而来,也希望那位青改变自己缺点,2013年开开心心
zhouwei716716 2012-12-31
  • 打赏
  • 举报
回复
期待楼主的源码哦!!!
diamond_back 2012-12-31
  • 打赏
  • 举报
回复
不错,期待楼主的源码
rstrego 2012-12-31
  • 打赏
  • 举报
回复
引用 130 楼 lyx_520 的回复:
引用 129 楼 dylike 的回复:这个层样式效果我早就封装成一个DLL了,只要一句代码即可实现,还扩展了功能,比如一句代码使窗体或控件支持鼠标缩放,一句代码使窗体支持鼠标穿透等,建议楼主也封装一下. 好的,本来是封装进去很多功能的。因为主要是共享下异型窗体的思路,= =怕太多太复杂。所以就删掉了。
WPF可以实现
mmxxoob 2012-12-31
  • 打赏
  • 举报
回复
加载更多回复(119)

111,100

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧