原文章的地址
http://www.csharpwin.com/csharpresource/2992.shtml来自:飞狼在天
(1)主体窗口
(2)皮肤的主题调节窗体
![](https://i-blog.csdnimg.cn/blog_migrate/5972992d740bd8783b6908519a6b97df.jpeg)
(2)皮肤的主题调节窗体
(4)精细化边框模式,以及控制按钮。包括鼠标移上去的明显显示,以及边框圆角,控制按钮的圆角搭配,包括子窗体的渐变效果,透过效果。这块是发了很多时间去弄的。
(5)透明度的开启调节
(6) 灵活个性化的处理。主题可以任意添加和删除,只需要添加指定图片即可,图片就可以自动加载。
上面那篇文章提供了一个基本的做法思想给我,看懂了基本的方法之后,具体的做法当然还是要靠自己。
二、在开发中碰到的技术难点。
(1)刚点击换肤方案,其各个窗体马上显示效果,不需要等到换肤窗口保存关闭。
解决:这个可以通过活动窗口的切换来做到这个点,在切换活动窗口的时候我首先在网上去找好的方法,但都是说取句柄,取线程等等,操作起来非常麻烦,并且效果不是很理想,后来我们老大告诉我一个办法,直接在其它窗口定义一个static窗体变量,在其它窗口直接调用.Form.Temp.Activate()就行,效果立马就显示出来。
(2 )防止皮肤更换的时候或者改变窗口大小的时候窗体抖动。
解决:开启双重缓存。
private void SetStyles()
{
SetStyle(
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.ResizeRedraw, true);
UpdateStyles();
}
这样的效果能减轻一些的闪动。要想完全消除闪动,必须采用合理的重绘方法。我的这个当不开启透明效果的时候完成不会出现闪动,但当开启透明效果的时,改变窗口大小时就会有少许闪动,这个有待改进。
(3)窗体的亮度对比度已经色彩的控制,使窗体的效果更加好。
这个我是花了一些时间去调试,因为没有美术功底,对这一块不太熟悉,但要想使界面好看,这一块又必不可少。
(4)主题方案的拓展
图片以及色彩都要能根据用户的喜好自由拓展,这个就需要采用灵活的方式,不能适用固定的控件放置在窗体,都必须适用动态添加,根据文件的配置去做处理。
(5)把TabContorl控件设置透明能透出背景色。
这个做出功能是很简单的,把背景色设为透明就可以了,或者设置TransparencyKey,但是纯粹这个设置的话加载窗体的时候会出现是闪动,同时切换的时候感觉速度有所变慢,这个后来是重新自己重绘了TabContorl控件,改变其样式,
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
这个可以减轻绝大部分闪动,基本可以忽略不记了。
经过半个月的时间,把这个窗体换肤的大体部分已经做出来了,设计方面都是仿照的迅雷7(个人设计水平有限),当然有些方面还是没有迅雷7做的好,只是把其换肤基本功能实现,要是在美工上和程序上再加以改进,也会能做出更好的效果。
经过半个月的时间,把这个窗体换肤的大体部分已经做出来了,设计方面都是仿照的迅雷7(个人设计水平有限),当然有些方面还是没有迅雷7做的好,只是把其换肤基本功能实现,要是在美工上和程序上再加以改进,也会能做出更好的效果。