【分享】C# 美化窗体(换肤)

starts_2000 2009-09-25 04:36:07

查看原文

一直想写一个比较完整的、容易扩展的窗体换肤的方案,由于时间问题,都没去实现这个想法。现在有朋友提出需要,就把以前写的重新拿出来看了一篇,花了些时间,做出了现在的这个换肤的方案。实现的过程中遇到了不少问题,但还是解决了,虽然也许还有些缺陷,但也算是比较完善了。现在只实现了完全代码绘制的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:绘制窗体控制按钮(最小化、最大化、关闭);
......

...全文
4635 123 打赏 收藏 转发到动态 举报
写回复
用AI写文章
123 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanjia15101 2012-08-04
  • 打赏
  • 举报
回复
xuexile
ncvtnet 2012-01-01
  • 打赏
  • 举报
回复
电饭锅
yangmeng_3331 2011-12-13
  • 打赏
  • 举报
回复
非常不错,楼主能把源码共享一下吗
yangmeng_3331 2011-12-13
  • 打赏
  • 举报
回复
非常不错,楼主能把源码共享一下吗
Ayayoyo 2011-12-12
  • 打赏
  • 举报
回复
HAO
Zpeiyuan 2011-08-14
  • 打赏
  • 举报
回复
学习!。。。
言多必失 2011-07-29
  • 打赏
  • 举报
回复
很好是很好,唯一遗憾的是 不支持改变背景颜色的,代码中没有注释 这是个很不好的习惯。换肤等等。
Zhen (Evan) Wang 2011-07-13
  • 打赏
  • 举报
回复
学习了,呵呵
csdsuper 2010-06-09
  • 打赏
  • 举报
回复
看样子不错可以下载不
oamoru 2009-10-21
  • 打赏
  • 举报
回复
mark
flyxiaoyao 2009-10-02
  • 打赏
  • 举报
回复
强大
haipeng1986 2009-09-30
  • 打赏
  • 举报
回复
wbpmrck 2009-09-30
  • 打赏
  • 举报
回复
学习了~~
CYBCAOYIBO 2009-09-30
  • 打赏
  • 举报
回复
ding qi lai
happy398182130 2009-09-30
  • 打赏
  • 举报
回复
顶下!!!学习了!!!
zhunz 2009-09-30
  • 打赏
  • 举报
回复
学习,
satdown 2009-09-30
  • 打赏
  • 举报
回复
好皮肤啊,不知道有没有源码
化木成林 2009-09-30
  • 打赏
  • 举报
回复
相当不错。顶了!
SimpleM 2009-09-29
  • 打赏
  • 举报
回复
感谢分享
神之疯子 2009-09-29
  • 打赏
  • 举报
回复
不错....
加载更多回复(97)

110,541

社区成员

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

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

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