我想做个窗体,用鼠标点击窗体部分并按住就能拖动窗体移动,而不需要按窗体的标题栏来拖动。
这个功能怎么实现?代码怎么写呢?谢谢达人帮忙解决!

解决方案 »

  1.   

    Option ExplicitPrivate Declare Function ReleaseCapture Lib "user32" () As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Const WM_NCLBUTTONDOWN = &HA1
    Private Const HTCAPTION = 2Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Button = 1 Then
            Call ReleaseCapture
            Call SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0)
        End If
    End Sub放在任何控件或者窗体的mousedown中就可以
      

  2.   

    楼上的正解  先用RealeaseCapture释放鼠标 然后SendMessage
      

  3.   

    http://61.186.252.131/Expert/topic/1793/1793218.xml?temp=.4484827
      

  4.   

    dim b as Boolean
    dim ix as integer,iy as integersub form_mousedown(button As .....)
    b=ture
    ix=x
    iy =y
    end subsub form1_mousemove(.......)
    if not b then exit sub
    me.move me.left+x-ix,me.top+y-iy
    end subsub form1_mouseup(........)
    b=0
    end sub
      

  5.   

    谢谢csdngoodnight解答,东西已经做出来了!我觉得这里面最难搞的就是鼠标移动如何实现与窗体移动的同步,并且它们不发生相对移动。
    不过 me.move me.left+x-ix,me.top+y-iy 这行代码现在还是有点不太理解,其中的ix和iy这两个量应该是不变的,它们是鼠标刚点击窗体时在窗体里的坐标,而me.left、me.top、x、y这四个量是一直在变化的,那怎么上面的那行代码就实现了鼠标与窗体没有发生相对移动呢?小生刚学VB不到一个月,还望大虾讲清楚啊,谢谢老~~