王国荣有本书,关于VB和API函数的,上面有现成的东西。

解决方案 »

  1.   

    发送wm_mousemove消息,自己写消息处理函数
      

  2.   

    建一个LABEL,鼠标单击按下事件(MOUSEDOWN)触发跟踪鼠标位置(MOUSEMOVE),
    WITH FORM1
    .LEFT=
    .TOP=
    END WITH
      

  3.   

    Private sngX as Single
    Private sngY as SingleMouseDown:
    sngX=x
    sngY=yMouseMove:
    If Button=VBLeftButton Then
        Me.Move Me.Left+x-sngX, Me.Top+y-sngY
    End If
      

  4.   

    Private 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 LongConst WM_NCLBUTTONDOWN = &HA1
    Const HTCAPTION = 2Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 1 Then
        ReleaseCapture
        Call SendMessage(me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, ByVal 0&)
    End If
    End Sub
      

  5.   

    我有不调用API的方法:
    Dim x0, y0 As Integer
    Dim dragging As Boolean
    Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
        x0 = x
        y0 = y
        dragging = True
    End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
        If dragging Then
            Me.Left = Me.Left + x - x0
            Me.Top = Me.Top + y - y0
        End If
    End SubPrivate Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
        dragging = False
    End Sub
      

  6.   

    拖动无系统标准标题栏的窗口
    吴斌 
      大家知道,在VB中可以通过设置Form的属性,制作无系统标题栏的窗口。可是,
    由于失去了系统标题栏,如何使用鼠标拖动窗口便成了一个棘手的问题。其实,借
    助API函数ReleaseCapture和SendMessage,这个问题便可迎刃而解了。
      首先,在module文件中加入下列声明语句:
      Declare Sub ReleaseCapture Lib"User"()
      Declare Function SendMessage Lib"User"(ByVal hWnd As Integer,ByVal 
    wMsg As Integer,ByVal wParam As Integer,_lParam As Any)As Long
      Public Const WM_SYSCOMMAND=&H112
      Public Const SC_MOVE=&HF010
      Public Const HTCAPTION=2
      然后,在Form的MouseDown事件中加入下列代码:
      ReleaseCapture
      Ret&=SendMessage(Me.hWnd,WM_SYSCOMMAND,_SC_MOVE+HTCAPTION,0)
      ……
      程序运行后,只要当光标落在Form区域时按住鼠标左键,便可以拖动窗口了。
    在一些要求生动活泼的界面的程序设计中,开发者常常希望自制风格独特的标题栏,
    以满足整个界面的要求。通过这个方法,就可以使自制的标题栏达到乱真的地步。
    不过,用作自制标题栏的控件,必须具有MouseDown事件以摆放上述代码。
    移动没有标题栏的窗口 
    我们一般是用鼠标按住窗口的标题栏,然后移动窗口,当窗口没有标题栏时,
    我们可以用下面的方法来移动窗口:
     
    在 BAS 文件中声明:
    Declare Function ReleaseCapture Lib "user32" () As Long
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( ByVal 
    hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) 
    As Long
    Public Const HTCAPTION = 2
    Public Const WM_NCLBUTTONDOWN = &HA1
     
    然后,在 Form_MouseDown 事件中:
    Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As 
    Single, Y As Single)
    ReleaseCapture
    SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
    End Sub
      

  7.   

    如何移动没有标题栏的窗口?
         
         我们一般是用鼠标按住窗口的标题栏,然后移动窗口,当窗口没有标题栏时,我们可以用下面的方法来移动窗口: 
         
         *API函数声明: 
         Declare Function ReleaseCapture Lib "user32" () As Long Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 
         Public Const HTCAPTION = 2 
         Public Const WM_NCLBUTTONDOWN = &HA1 
         在 Form_MouseDown 事件中: 
         Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 
         ReleaseCapture SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION,0& 
         End Sub 
      

  8.   

    我刚也发了这个问题,用API在2000下不能拖动窗口,请各位高手查验!我是在公司DELL2000下测试的,无一台能正常运行,为什么???
      

  9.   

    通过mouse_move()改变窗体的位置
      

  10.   

    楼上的那位朋友说不用API的代码很好用,不信的话可以试试.
      

  11.   

    还可以这样(这样可以移动时显示窗体内容):Dim tx As Single
    Dim ty As SinglePrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = vbLeftButton Then
        tx = X
        ty = Y
    End If
    End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = vbLeftButton Then
        Me.Move Me.Left + X - tx, Me.Top + Y - ty
    End If
    End Sub模块申明
    Public Declare Function ReleaseCapture Lib "user32" () As Long
    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long窗体:
    Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Button = 1 Then
            Dim ReturnVal As Long
            X = ReleaseCapture()
            ReturnVal = SendMessage(hwnd, &HA1, 2, 0)
        End If
    End Sub
      

  12.   

    SendMessage(hwnd, &HA1, 2, 0) 是我刚用的方法,还没测试2000下可以不可以原来是用的 &H112, &HF012, 0&, 反正2000不能用,不知道是我编译有BUG还是真的不能用?明天到公司再试试
      

  13.   

    问题解决,现在散分! Tenner(Tenner) 10分; zyl910 5分;EpopeeLei(午夜狂编) 5分。真的感谢大家这么热心,没拿到分的别生气。