苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 7298|回复: 1

[C#皮肤] C#皮肤-用户控件EnterUserControl的实现

[复制链接]
发表于 2013-1-18 13:23:15 | 显示全部楼层 |阅读模式
找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里联系我
                       C#皮肤-用户控件EnterUserControl的实现
导读部分
-------------------------------------------------------------------------------------------------------------
C#皮肤-实现原理系列文章导航
http://www.sufeinet.com/thread-2-1-1.html

最过忙坏了,呵呵,费话不多说开始今天的活吧,EnterUserControl是为EnterFrom1这个用户控件服务的,这是一个用户控件,本身没有意义主要是子类实现,我们先来看看实现的效果吧
enterusercontrol1.jpg
这里就是实现 的效果图片,            构造器实现
[code=csharp]public EnterUserControl()
        {
            this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
            InitializeComponent();
            this.Controls.Remove(this.pnlRight);
            this.Controls.Remove(this.pnlLeft);
            this.Controls.Remove(this.pnlBackGroup);
        }[/code]

这里就不多说了和之前的实现基本没有任何分别 ,下面是重写的WndProc方法
[code=csharp]protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case Win32.WM_COMMAND:
                    Win32.SendMessage(Handle, Win32.WM_SYSCOMMAND, (int)m.WParam, (int)m.LParam);
                    break;
                case Win32.WM_SYSCOMMAND:
                    base.WndProc(ref m);

                    if (m.WParam.ToInt64() == Win32.SC_RESTORE)
                    {
                        this.Height += 6;
                        this.Width += 6;
                    }
                    else if (m.WParam.ToInt64() == Win32.SC_MAXIMIZE)
                    {
                        Application.DoEvents();
                    }

                    break;
                default:
                    base.WndProc(ref m);
                    break;
            }
        }[/code]
在这之后我们再重写一下OnLoad事件就成功一半了
[code=csharp]protected override void OnLoad(EventArgs e)
        {
            this.Controls.Add(this.pnlRight);
            this.Controls.Add(this.pnlLeft);
            this.Controls.Add(this.pnlBackGroup);
           
            if (!DesignMode)
            {
                this.Hide();
            }

            base.OnLoad(e);

            Win32.SetWindowLong(this.Handle, -16,Win32.GetWindowLong(this.Handle,-16) -Win32.WS_MAXIMIZEBOX );

            this.Show();
        }[/code]
在加载时我添加这三个Panel

[code=csharp]this.Controls.Add(this.pnlRight);
            this.Controls.Add(this.pnlLeft);
            this.Controls.Add(this.pnlBackGroup);[/code]

为了移动是方便我们加上这两个事件
1.Caption_MouseMove事件
[code=csharp]private void Caption_MouseMove(object sender, MouseEventArgs e)
        {
            ((Control)sender).Cursor = Cursors.Default;
            if (e.Button == MouseButtons.Left)
            {
                Win32.ReleaseCapture();
                Win32.SendMessage(Handle, 274, 61440 + 9, 0);
            }
        }[/code]

2.caption_MouseUp事件
[code=csharp]private void caption_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right && ((Control)sender).Cursor == Cursors.Default && e.Y <= SystemInformation.CaptionHeight)
            {
                Win32.TrackPopupMenu(Win32.GetSystemMenu(Handle, 0).ToInt32(), 2, Cursor.Position.X, Cursor.Position.Y, 0, Handle, 0);
            }
        }[/code]

最的我们重写一下Text属性
[code=csharp]public override string Text
        {
            get
            {
                return base.Text;
            }
            set
            {
                base.Text = value;
            }
        }[/code]
这个相对来说比较简单一些了
我就不多说什么了,大家把代码调试一下就明白了。感谢大家支持
发表于 2013-1-18 13:31:21 | 显示全部楼层
找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里联系我
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2021-9-28 11:40

© 2014-2021

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