• C#:form的窗体属性formborderstyle设置为none后就不能移动了


    摘自:http://www.cnblogs.com/xiaofengfeng/archive/2011/09/16/2178689.html

    1.获取窗体的最大化、最小化事件:

    (其实windows操作系统的事件处理靠的就是消息,所以我们可以从windows的消息队列中找到窗体最大化、最小化、关闭的消息,应用程序就是靠这些消息来工作的)做用应用程序时想自己控制窗体的最大化最小化并作出相关处理时候,可以重写窗体的WndProc方法,实现自己想要的最大化、最小化效果。如果使用窗体的Resize(调整大小时候发生)事件也可以监控窗体的状态,但有时候不能实现想要的效果。比如动态的改变窗体最大化大小的时候。

    private int WM_SYSCOMMAND = 0x112;
            private long SC_MAXIMIZE = 0xF030;
            private long SC_MINIMIZE = 0xF020;
            private long SC_CLOSE = 0xF060;

    protected override void WndProc(ref   Message m)//参数为windows的消息
            {
                if (m.Msg == WM_SYSCOMMAND)
                {
                    if (m.WParam.ToInt64() == SC_MAXIMIZE)
                    {
                        if (this.Height == 300)
                        {
                            this.Size = new Size(311, 90);
                        }
                        else
                        {
                            this.Size = new Size(300,300);
                        }
                        return;
                    }
                    if (m.WParam.ToInt64() == SC_MINIMIZE)
                    {
                        WindowState = FormWindowState.Minimized;
                        return;
                    }
                    if (m.WParam.ToInt64() == SC_CLOSE)
                    {
                        this.Close();
                        return;
                    }
                }
                base.WndProc(ref   m);
            }

    2.打造个性化得窗体:

    以前发现一些的按钮好像是加载窗体的标题栏的,于是自己就尝试将控件拖到到窗体的标题栏(不要笑,每个人都有犯傻的时候)结果可想而知,后来才发现将窗体的FormBorderStyle属性设置为None,然后控件就可以直接拖到窗体的顶部了。但是这时候窗体已经没有了标题栏,窗体的移动、最大化、最小化、关闭这些需要自己写代码来完成。

    窗体的移动:

            bool formMove = false;//窗体是否移动
            Point formPoint;//记录窗体的位置

    private void Form4_MouseDown(object sender, MouseEventArgs e)//鼠标按下
            {
                formPoint = new Point();
                int xOffset;
                int yOffset;
                if (e.Button == MouseButtons.Left)
                {
                    xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
                    yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height;
                    formPoint = new Point(xOffset, yOffset);
                    formMove = true;//开始移动
                }
            }

    private void Form4_MouseMove(object sender, MouseEventArgs e)//鼠标移动
            {
                if (formMove == true)
                {
                    Point mousePos = Control.MousePosition;
                    mousePos.Offset(formPoint.X, formPoint.Y);
                    Location = mousePos;
                }
            }

    private void Form4_MouseUp(object sender, MouseEventArgs e)//鼠标松开
            {
                if (e.Button == MouseButtons.Left)//按下的是鼠标左键
                {
                    formMove = false;//停止移动
                }
            }

    窗体的最大化、最小化和关闭:

    需要自己拖三个picturebox控件到窗体的右上角,最大化、最小化和关闭的图标就自己去找了。添加picturebox的单击事件。如果要实现一些特效可以加入picturebox的MouseEnter、MouseLeave事件来更换图片。

    private void pictureBox1_Click(object sender, EventArgs e)
            {
                     this.WindowState=FormWindowState.Minimized;//最小化
            }

    private void pictureBox2_Click(object sender, EventArgs e)
            {

                          WindowState = FormWindowState.Maximized;//最大化

            }

    private void pictureBox3_Click(object sender, EventArgs e)
            {
                this.Close();
            }

  • 相关阅读:
    指针与数组关联导致的一些现象 分类: H_HISTORY 20130211 20:14 516人阅读 评论(0) 收藏
    宏定义一些内容 分类: H_HISTORY 20130207 23:20 585人阅读 评论(0) 收藏
    使用lstat()判断文件类型 分类: H_HISTORY 20130224 11:48 703人阅读 评论(0) 收藏
    关于VMware虚拟机的上网 分类: C_OHTERS 20130220 14:36 336人阅读 评论(0) 收藏
    Segmentation fault (core dumped) 分类: H_HISTORY 20130206 11:34 18800人阅读 评论(0) 收藏
    C语言内存分配时间 分类: H_HISTORY 20130211 10:51 1432人阅读 评论(3) 收藏
    GTK+与QT的对比 分类: H_HISTORY 20130205 09:27 3101人阅读 评论(0) 收藏
    枚举作为整数 分类: H_HISTORY 20130208 11:22 576人阅读 评论(0) 收藏
    01背包问题,动态规划求解
    求两个字符串的相似度或子串
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/3087169.html
Copyright © 2020-2023  润新知