winform换肤

原文章的地址http://www.csharpwin.com/csharpresource/2992.shtml来自:飞狼在天
(1)主体窗口


(2)皮肤的主题调节窗体 

(3)选择主题自动关联最合适的配色方案,配色方案可以改变整个窗体的按钮以及其它控件的颜色,弹出窗体有逐渐淡化效果。每点击另一种主题,所有继承于基类窗体的马上变换(类似于迅雷7)。 

(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做的好,只是把其换肤基本功能实现,要是在美工上和程序上再加以改进,也会能做出更好的效果。
posted @ 2012-12-04 16:51  柏衣  阅读(529)  评论(0编辑  收藏  举报