我有一个窗体设置为无边框的,但就不能更改大小了,怎么才能和有边框的时候一样,用鼠标按着一拖就能改变大小啊.能否给个例子先(最好给个简单点的,能改变窗体的高度的就行了).

解决方案 »

  1.   

    程序实现的思路是在窗体的MouseDown事件中获取鼠标相对于窗体的坐标,在MouseOver事件中获取新的鼠标坐标值,显然这两个坐标值的差加上窗体原来的坐标,就是窗体应该移动到的新的坐标值。然后把窗体位置移动到新坐标值处即可。
    private Point mouseOffset;
    private bool isMouseDown = false; private void Form2_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    int xOffset;
    int yOffset; if (e.Button == MouseButtons.Left) 
    {
    xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
    yOffset = -e.Y - SystemInformation.CaptionHeight - 
    SystemInformation.FrameBorderSize.Height;
    mouseOffset = new Point(xOffset, yOffset);
    isMouseDown = true;
    }
    } private void Form2_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if (isMouseDown) 
    {
    Point mousePos = Control.MousePosition;
    mousePos.Offset(mouseOffset.X, mouseOffset.Y);
    Location = mousePos;
    } } private void Form2_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    isMouseDown=false;
    }
      

  2.   

    protected override CreateParams CreateParams
            {
                get
                {
                    CreateParams cp = base.CreateParams;
                    cp.Style |= 0xC0000;
                    return cp;
                }
            }
      

  3.   


            protected override CreateParams CreateParams
            {
                get
                {
                    CreateParams cp = base.CreateParams;
                    cp.Style |= 0xC0000;
                    return cp;
                }
            }确实是可以拖动了,但是我的无边框窗体成了有边框的了~~~~。
    另外介绍一下...cp.Style |= 0xC0000到底是个什么东东哦?不懂!
      

  4.   

    另外3楼的你写的代码可能是误解了我的题目意思了,而且你写的拖动也存在问题哦,没我自己想的好(如下):
    private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if(e.Button == MouseButtons.Left) 

    this.mousePosition.X = e.X; 
    this.mousePosition.Y = e.Y; 
    }
    }private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if(e.Button == MouseButtons.Left) 

    this.Top = Control.MousePosition.Y - mousePosition.Y; 
    this.Left = Control.MousePosition.X - mousePosition.X; 


    }
      

  5.   

    上面的mousePosition定义忘了写private System.Drawing.Point mousePosition=new Point(0,0);
      

  6.   

    protected override void WndProc(ref System.Windows.Forms.Message m)
    {
    int WM_NCHITTEST = 0x0084;
    int HTBOTTOMRIGHT= 17;
    int HTBOTTOMLEFT = 16;
    int HTCLIENT = 1;

    if(m.Msg == WM_NCHITTEST)
    {
    int p = Control.MousePosition.X - this.Left + 2;//2为允许范围
    if( p >= this.Width)//Mouse位于左边
    m.Result = (IntPtr)HTBOTTOMRIGHT;
    else if(p <= 2)//Mouse位于右边
    m.Result = (IntPtr)HTBOTTOMLEFT;
    else
    m.Result = (IntPtr)HTCLIENT;
    }
    else
    base.WndProc (ref m);
    }
    Mouse位于上边,下端的情况自己搞定。消息号可以查看winuser.h的定义