苏飞—Perky Su

签名: 软件开发,功能定制,全国各种接口开发,网页抓取程序,请联系我给我留言      Q Q:                    

posts - 184, comments - 1662, trackbacks - 3, articles - 5
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理
                                                                           C#仿QQ皮肤-实现原理系列文章导航
                                                              http://www.cnblogs.com/sufei/archive/2010/03/10/1682847.html                                                  

 

C#仿QQ皮肤-总体层次说明(一)

http://www.cnblogs.com/sufei/archive/2010/03/17/1688009.html

 

   1.窗体皮肤

    窗体皮肤不用多说大家都 知道就是窗体的皮肤,当然这里面我还细分为窗体,和用户控件两种,也就是From和UserControl

在这里我们实现以下几个窗体和用户控件

        1.         基窗体FormBase与基用户控件FormBase1的实现

        2.         基窗体FunctionFormBase的实现

        3.         主窗体MainForm和Main的实现

        4.         窗体EntryForm和用户控件EnterUserControl的实现

        5.         皮肤控件窗体SkinForm的实现

        6.        Windows消息提示框窗体MessageBoxForm的实现

        7.        常用用户控件EnterFrom1和窗体EntryForm的实现

红色的是我们上一次说过的,接着向下走吧,

第四个,窗体EntryForm和用户控件EnterUserControl

      窗体EntryForm 是一个基本窗体,他的做用主要是用来做一般窗体的,也就是像添加删除,只要是从主窗体弹出的窗体都 要使用他,而EnterUserControl 用户控件和EntryForm 窗体的实现是一样的,只是一个是用户控件一个是窗体,用户控件是用来嵌套到主窗体里的,所以它是项目中使用最多的一个

     

第五个, 皮肤控件窗体SkinForm

                   

这个窗体应该是很容易理解的就是换皮的窗体,调色版,我们可以选择预先设计好的8种色,也可以自己调配,底纹就只有9个让大家选择了

第六个,Windows消息提示框窗体MessageBoxForm

                   

            

常用的有上面图片显示的3种

提示,提问,错误,

这个设计跟系统自带的功能上有所增加,比如可以换图片,可以加入控件 ,还可以改变框的大小,可以设计字体的样式等

看一下简单的用法

代码
 //成功
                        if (result == 0)
                        {
                            MessageBoxForm objm 
= new MessageBoxForm("短信发送成功!""提示信息", MessageBoxIcon.Information);
                            objm.ShowDialog();
                            Parent_Main.RefreshForm();
                            binger();
                        }
                        
//不成功
                        else if (result == -1)
                        {
                            MessageBoxForm objm 
= new MessageBoxForm("发送信息失败!""提示信息", MessageBoxIcon.Error );
                            objm.ShowDialog();
                        }
                        
//更新数据不成功
                        else if (result == -2)
                        {
                            MessageBoxForm objm 
= new MessageBoxForm("网络问题发送失败!""提示信息", MessageBoxIcon.Information);
                            objm.ShowDialog();
                        }
                        
//验证身份不成功
                        else if (result == -3)
                        {
                            MessageBoxForm objm 
= new MessageBoxForm("你的账户不成功请确认已成功登录!""提示信息", MessageBoxIcon.Information);
                            objm.ShowDialog();
                        }
                        
//余额不足
                        else if (result == -4)
                        {
                            MessageBoxForm objm 
= new MessageBoxForm("你的账户余额不足请充值!""提示信息", MessageBoxIcon.Information);
                            objm.ShowDialog();
                        }

 

 

更详细的东西在下面的具体的章节里再说

第七个 常用用户控件EnterFrom1和窗体EntryForm

      这两个是派生自第四节里面的用户控件而来的,主要是为了使用起来更加的方便

 

使用起来也是很方便,跟普通的窗体用法 是一样的,只要加上这样一行代码就OK了

 

 public partial class addColumnAdmini : CRD.WinUI.Forms.EntryForm

 

 

到这里我们的窗体皮肤就算是完了,

第二大类,控件皮肤 

     

      

这些是一些基本的控件,也是最常用的几种,在具体的文章里会一一说明 他们的实现和使用方法

这类控件 就不再一一说明 了, 大家都 经常使用一看就知道 是做什么用的,呵呵

我简单的说一个实现方法吧

一般的控件里都 会有这个一样方法

代码
 protected override void WndProc(ref Message m)
      {

          
base.WndProc(ref m);
          
if (m.Msg == 0xf || m.Msg == 0x133)
          {
              Shared.ResetBorderColor(m, 
this);
          }
      }

 

 

这种方法是为了解决系统自带的控件不提共的一些东西,要用到一些API ,大家都 知道 像边框,滚动条,之类的东西,MS并没有提共现有的修改样式方法或是属性

,我是使用Windows消息拦截的方法来实现的,先是拦截到消息估后,绘制自己想要的,再用自己想要的把系统的覆盖掉,基本都 是使用这种方法来实现的,

这里用的Api会在具体的控件里一一说明 。

在每一个的构造器里都 会加入一些默认的或是需要的一些自定义好的样式

 

代码
public panel()
            : 
base()
        {
            
this.SetStyle(ControlStyles.UserPaint, true);
            
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            
this.SetStyle(ControlStyles.DoubleBuffer, true);
            
this.SetStyle(ControlStyles.ResizeRedraw, true);
            
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
        }

 

 

就到这里吧,费话也不多说了,因为这些东西都 是无形的,从下一节开始就是有形的代码实现了,到时候可能会多些费话,呵呵

-------------------------------------------------------------签名部分------------------------------------------------------------------------

                          

         欢迎大家转载,如有转载请注明文章来自:   http://sufei.cnblogs.com/   

签名:做一番一生引以为豪的事业;在有生之年报答帮过我的人;并有能力帮助需要帮助的人;    

软件开发,功能定制,请联系我给我留言 QQ:361983679 Email:sufei.1013@163.com  MSN:sufei.1013@163.com 


-------------------------------------------------------------------推荐文章--------------------------------------------------------------
1.C#仿QQ皮肤 2.Sql2005学习笔记 3.httpHelper类

Feedback

#1楼  回复 引用 查看   

2010-03-20 21:48 by 不死小强      
这个皮肤真漂亮啊,支持楼主

#2楼  回复 引用 查看   

2010-03-20 22:12 by 不死小强      
怎么我回复时间在楼主发文时间之前?

#3楼[楼主]  回复 引用 查看   

2010-03-20 22:14 by 苏飞      
不在啊, 你看看现在的时间,你第一次是,2010-03-20 23:48
第二次是2010-03-21 00:12,这可能是博客园的问题

#4楼[楼主]  回复 引用 查看   

2010-03-20 22:20 by 苏飞      
@不死小强
不在啊, 你看看现在的时间,你第一次是,2010-03-20 23:48
第二次是2010-03-21 00:12,这可能是博客园的问题

#5楼  回复 引用 查看   

2010-03-21 01:48 by 数据加载中...      
看了这篇文章才去下的皮肤,运行皮肤后,我在这里问下,楼主的皮肤我运行的时候,显示时(例如,打开标签,切换皮肤,程序启动)会有短暂闪烁。这个要如何解决,还是无法解决。

#6楼[楼主]  回复 引用 查看   

2010-03-21 01:58 by 苏飞      
@数据加载中...
这个可以解决不过没有想到更好的解决方案,正在改进中,谢谢

#7楼  回复 引用 查看   

2010-03-21 02:46 by 数据加载中...      
哇 楼主你居然在啊。哈哈。
嗯 我还想问下,你在标题栏上添加按钮的关键代码在哪里啊。
您直接说方法名或者文件名就行,我这下了您的皮肤代码。

#8楼[楼主]  回复 引用 查看   

2010-03-21 05:53 by 苏飞      
@数据加载中...
MinFrom 或是Main

#9楼  回复 引用 查看   

2010-03-21 10:08 by liulun      
是在WPF下做的吗?

#10楼[楼主]  回复 引用 查看   

2010-03-21 18:51 by 苏飞      
@liulun
呵呵不是的

#11楼  回复 引用 查看   

2010-11-02 22:48 by 新瓶老酒      
有下载嘛?

#12楼[楼主]  回复 引用 查看   

2010-11-03 12:29 by 苏飞      
@新瓶老酒
http://www.cnblogs.com/sufei/archive/2010/03/10/1682847.html
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1690624 CGmvyRnF/g0=