WinForm无边框窗体实现双击缩放及拖动

来源:互联网 发布:东奥会计怎么样 知乎 编辑:程序博客网 时间:2024/05/20 10:51
有时候要实现无边框的winform窗体,由于没有边框了,所以缩放功能没有了,同时也不能拖动窗体。在实际应用中,我们经常会有一个窗体的头部来显示Title,需要在这个头部左键双击实现缩放以及左键按住实现拖动。缩放时,应该首先设置窗体的默认长、宽及与屏幕的左边距和上边距。拖动时,根据鼠标位置移动窗体位置。两个操作都是根据MouseDown事件来操作的,所以要理清思路。双击缩放,在第一次点击时,设置过期时间,若在过期时间内在此点击,则改变窗体大小。拖动时,需要MouseDown、MouseUp、MouseMove同时配合,在MouseDown是第一次触发时,记录当前鼠标位置,并设置属性左键按下标记leftFlag为true。若leftFlag为true移动鼠标,则在MouseMove事件下开始移动窗体,MouseUp事件中改变左键按下标记leftFlag为false。过期时间:
        Timer timer = new Timer();
点击次数:
        clickTime=0;
左键按下标志:
        leftFlag=false
窗体初始化时设置过期时间:
        timer.Interval = 300;        timer.Tick += (s, e1) => { timer.Stop();clickTime = 0; };
MouseMove事件:
        private void panel1_MouseMove(object sender, MouseEventArgs e)        {            if(leftFlag)            {                    PointmouseSet = Control.MousePosition;                    mouseSet.Offset(mPoint.X,mPoint.Y);  //设置移动后的位置                    Location = mouseSet;            }        }
MouseUp事件:
        private void panel1_MouseUp(object sender, MouseEventArgs e)        {        leftFlag = false;        }
MouseDown事件:
        private void panel1_MouseDown(object sender, MouseEventArgs e)        {        clickTime++;            timer.Start();            if (clickTime % 2 == 0)            {            this.WindowState = this.WindowState == FormWindowState.Maximized ?FormWindowState.Normal : FormWindowState.Maximized;                    clickTime = 0;        }            else            {                    if(!leftFlag)                    {                mPoint.X = -e.X;                        mPoint.Y = -e.Y;                        leftFlag = true;            }                    else                    {                leftFlag = false;                    }            }    }
0 0
原创粉丝点击