Public 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 Declare Sub ReleaseCapture Lib "user32" () Public Const WM_NCLBUTTONDOWN = &HA1 Public Const HTCAPTION = 2Private Sub 控件名_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) ' On Error Resume Next If Button = vbLeftButton Then Call ReleaseCapture SendMessage 控件名.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0& End If End Sub
不用api的方法: Dim IsMove As Boolean Dim Mx As Single, My As Single Private Sub Lab_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) IsMove = True Mx = X My = YEnd SubPrivate Sub Lab_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)With Lab If IsMove = True Then .Left = .Left - Mx + X .Top = .Top - My + Y End If End With End SubPrivate Sub Lab_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) IsMove = False End Sub
Public Declare Sub ReleaseCapture Lib "user32" ()
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2Private Sub 控件名_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
' On Error Resume Next
If Button = vbLeftButton Then
Call ReleaseCapture
SendMessage 控件名.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
End If
End Sub
Dim IsMove As Boolean
Dim Mx As Single, My As Single
Private Sub Lab_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
IsMove = True
Mx = X
My = YEnd SubPrivate Sub Lab_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)With Lab
If IsMove = True Then
.Left = .Left - Mx + X
.Top = .Top - My + Y
End If
End With
End SubPrivate Sub Lab_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
IsMove = False
End Sub