先把窗體的 "BorderStyle" 屬性設(shè)置為 "0 - None"。
方法㈠:簡單法[在使用博士Win 7風(fēng)格包的XP系統(tǒng)中測試時(shí)發(fā)現(xiàn)問題:鼠標(biāo)按下窗體時(shí),窗體會(huì)先移動(dòng)一下]
*************************************************************************************************************************************
Option Explicit
Dim i, x1 As Double, y1 As Double, x2 As Double, y2 As Double
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
i = 1
x1 = X
y1 = X
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If i = 1 Then
x2 = X - x1+Form1.Left
y2 = Y - y1+Form1.Top
Form1.Move x2,y2
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
i = 0
End Sub
方法㈡:API法[到目前為止沒有發(fā)現(xiàn)任何問題,可以說接近完美,因此推薦大家使用這種方法]
*******************************************************************************************************************
'以下代碼在模塊:
Option Explicit
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 Function ReleaseCapture Lib "user32" () As Long
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2
'以下代碼在Form:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'---------------------------------------------------------------------------------------------------------
'直接在 Form 的 MosueMove 事件中模擬 TitleBar 被按著的訊息來實(shí)現(xiàn)無框窗體移動(dòng)
'---------------------------------------------------------------------------------------------------------
Dim lngReturnValue As Long
If Button = 1 Then
ReleaseCapture
lngReturnValue = SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End If
End Sub
聯(lián)系客服