【分享】C# 美化窗体(换肤)
查看原文
一直想写一个比较完整的、容易扩展的窗体换肤的方案,由于时间问题,都没去实现这个想法。现在有朋友提出需要,就把以前写的重新拿出来看了一篇,花了些时间,做出了现在的这个换肤的方案。实现的过程中遇到了不少问题,但还是解决了,虽然也许还有些缺陷,但也算是比较完善了。现在只实现了完全代码绘制的SkinFormProfessionalRenderer,接下来有时间会写一个SkinFormImageRenderer,实现只要做好图片就可以换肤。换肤后的窗体与标准的Windows窗体保持一样的功能,如:拥有系统菜单,拖动改变窗体大小等。
看完效果,来看看SkinForm的实现原理:
1、把Form设置为无标题栏窗口。
2、为了使Form可以像标准的Windows窗体那样拥有系统菜单和拖动改变窗体大小,加入WS_THICKFRAME和WS_SYSMENU窗体样式。
3、处理相应得窗体消息,实现窗体的标准操作。
4、实现SkinFormRenderer,绘制窗体的标题栏、边框、按钮等。
原理只做简单介绍,要详细说明,那得写很多东西了,介绍一下SkinForm中加入的几个属性的功能:
1、BorderWidth,设置或获取窗体的边框的宽度。
2、CanResize:设置或获取窗体是否可以改变大小。
3、CaptionFont:设置或获取窗体标题的字体。
4、CapntionHeight:设置或获取窗体标题栏的高度。
5、CloseBoxSize:设置或获取关闭按钮的大小。
6、MinimizeBoxSize:设置或获取最小化按钮的大小。
7、MaximizeBoxSize:设置或获取最大化(还原)按钮的大小。
8、ControlBoxOffset:设置或获取控制按钮的偏移。
9、ControlBoxSpace:设置或获取控制按钮的间距。
10、RoundStyle:设置或获取窗体的圆角样式。
11、Radius:设置或获取窗体的圆角的大小。
12、Renderer:设置或获取窗体的绘制方法。
接下来介绍窗体的绘制类SkinFormRenderer,这是比较重要的类,它是一个抽象类,重写它里面的绘制方法,就可以得到新的窗体皮肤。这个类里面主要有几个抽象方法:
1、CreateRegion:创建一个Region,提供给SkinForm使用。
2、OnRenderSkinFormCaption:绘制窗体标题栏。
3、OnRenderSkinFormBorder:绘制窗体边框。
4、OnRenderSkinFormBackground:绘制窗体背景。
5、OnRenderSkinFormControlBox:绘制窗体控制按钮(最小化、最大化、关闭);
......
[解决办法]
SF??
[解决办法]
很漂亮的皮肤 。
[解决办法]
不错 感谢楼主的分享
[解决办法]
thx
[解决办法]
good good study ,day day up
[解决办法]
ths.
[解决办法]
好东西
[解决办法]
了解一下,很不错!
[解决办法]
赞
[解决办法]
赞
[解决办法]
嗯嗯,显然很不错,攒
[解决办法]
一直很有兴趣,但是都没时间去研究的东东,太感谢了.UPUPUP
[解决办法]
up
[解决办法]
马裤 很不错 赞
[解决办法]
上次那个截图的开源项目好像也是发到这个站了 .....很出名的网站吗?不懂
[解决办法]
向楼主学习!
[解决办法]
貌似 不错
[解决办法]
貌似 不错
[解决办法]
很漂亮的皮肤 。
[解决办法]
向楼主学习!
[解决办法]
太感谢了。顶
顶顶
顶
顶顶顶
[解决办法]
mark
[解决办法]
太好了,学习。
------解决方案--------------------
好东西!收藏下来了..
[解决办法]
有什么用么
[解决办法]
正在做整套的.
[解决办法]
不错,有源码下载就好了
[解决办法]
jf
[解决办法]
虚心学习
[解决办法]
学习收藏……
[解决办法]
学习
[解决办法]
高手,不一般!!
[解决办法]
高手!!!!!!!
[解决办法]
很漂亮.
[解决办法]
不错,思路也很重要
[解决办法]
看看...
学习一下...
[解决办法]
很好很强大
[解决办法]
[解决办法]
有空做个简单的教程就最好了
[解决办法]
顶一下,如果有控件源码就好了。
[解决办法]
这贴一定要顶
[解决办法]
ddddddddddddddddddddddddd
[解决办法]
学习,期待源码。。。。。。。
[解决办法]
好!
[解决办法]
jf
[解决办法]
顶下。。。。。。。。。。。。。。。。。。。
[解决办法]
up,
楼主哦,网站问询好像不能够发帖,不知道什么原因
[解决办法]
很好很强大
[解决办法]
很漂亮,!顶下
[解决办法]
向楼主学习!
[解决办法]
关注,不错
[解决办法]
无语了,有人升级好快,不知道是不是刷的,顶一下楼主!
[解决办法]
很不错,顶下
[解决办法]
漂亮!!!!!
[解决办法]
漂亮!!!!!
[解决办法]
很不错的皮肤啊
[解决办法]
谢谢您给我介绍了个好网站
[解决办法]
C#确实很强大, 但我还是喜欢搞java
[解决办法]
谢谢分享
------解决方案--------------------
很漂亮哈。。
[解决办法]
顶一下,技术含量不会很高。
[解决办法]
顶一下
[解决办法]
Good!
[解决办法]
关注一下
[解决办法]
支持!
[解决办法]
了解一下
[解决办法]
关注一下
[解决办法]
mark
[解决办法]
不错,看看
[解决办法]
就是炫
[解决办法]
很好的,在原文那边有源代码
[解决办法]
很好。
[解决办法]
很好很强大
[解决办法]
支持,有没有更详细的资料?
[解决办法]
楼主,快结帐吧,穷死了都快!
[解决办法]
非常不错的窗口界面
[解决办法]
jf
[解决办法]
不错
支持
[解决办法]
学习了~~~~~
[解决办法]
good point
[解决办法]
好西,最好提供代下分享! !
[解决办法]
up
[解决办法]
有资源没?
[解决办法]
太棒了。
[解决办法]
very good
[解决办法]
我也想学,不知道哪有更详细点的资料
[解决办法]
x学习
[解决办法]
jf
[解决办法]
不错,,学习了