http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 13451|回复: 3

[C#皮肤] C#仿QQ皮肤-总体层次说明(二)

[复制链接]
发表于 2012-8-31 08:08:16 | 显示全部楼层 |阅读模式
导读部分
-------------------------------------------------------------------------------------------------------------
C#仿QQ皮肤-实现原理系列文章导航
http://www.sufeinet.com/forum.php?mod=viewthread&tid=2

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

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
skin1.png skin2.png
这个窗体应该是很容易理解的就是换皮的窗体,调色版,我们可以选择预先设计好的8种色,也可以自己调配,底纹就只有9个让大家选择了
第六个,Windows消息提示框窗体MessageBoxForm
messs4.png messs3.png
mess2.png messs1.png
常用的有上面图片显示的3种
提示,提问,错误,
这个设计跟系统自带的功能上有所增加,比如可以换图片,可以加入控件 ,还可以改变框的大小,可以设计字体的样式等
一下简单的用法
[C#] 纯文本查看 复制代码
//成功
                        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
这两个是派生自第四节里面的用户控件而来的,主要是为了使用起来更加的方便


enterForm1.png
使用起来也是很方便,跟普通的窗体用法 是一样的,只要加上这样一行代码就OK了
[C#] 纯文本查看 复制代码
 public partial class addColumnAdmini : CRD.WinUI.Forms.EntryForm

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

第二大类,控件皮肤
-------------------------------------------------------------------------------------------------------------


kongjian1.png
gird.png
这些是一些基本的控件,也是最常用的几种,在具体的文章里会一一说明 他们的实现和使用方法
这类控件 就不再一一说明 了, 大家都 经常使用一看就知道 是做什么用的,呵呵
我简单的说一个实现方法吧
一般的控件里都 会有这个一样方法
[C#] 纯文本查看 复制代码
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会在具体的控件里一一说明 。
在每一个的构造器里都 会加入一些默认的或是需要的一些自定义好的样式
[C#] 纯文本查看 复制代码
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);
        }



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-10-31 16:35:12 | 显示全部楼层
真是难得给力的帖子啊。
发表于 2014-11-3 20:46:55 | 显示全部楼层
来研究研究有什么可以借鉴的
发表于 2014-11-8 12:48:21 | 显示全部楼层
感觉对我这种初学的来说,看起来好难啊
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-4-24 23:23

© 2014-2021

快速回复 返回顶部 返回列表