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();
        }

 

 

posted @ 2013-05-19 18:33  KeenLeung  阅读(1118)  评论(0编辑  收藏  举报