有很多軟件為了實現(xiàn)特殊的顯示效果,采用非矩形的窗體,而這些窗體往往沒有標題欄。想要移動一個沒有標題欄的窗口是不那么容易的。下面我介紹兩種在VB中采取不同原理的方法移動一個沒有標題欄的窗口。
方法一
這種方法是在窗體的MouseDown、MouseUp和MouseMove等事件的處理過程中添加代碼,實現(xiàn)在鼠標左鍵按下后移動時,改變窗體的Left和Top屬性,實現(xiàn)移動無標題欄的窗體。
進入VB,把窗體Form1的BorderStyle屬性設置為0-None(無標題欄),再窗體上添加一個ButtonCommand組件,用來關閉程序。代碼如下:
Private Type POINT
X As Single
Y As Single
End Type
Dim FormP As POINT
'記錄窗體原始位置
Dim MouseP As POINT
'記錄鼠標按下時的位置
Dim MouseLButtonDown As Boolean
'記錄鼠標左鍵是否按下
Private Sub Command1_Click()
End '退出程序
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
FormP.X = Form1.Left
'記下窗體原始坐標位置
FormP.Y = Form1.Top
MouseP.X = X
'記下鼠標按下時的位置
MouseP.Y = Y
If Button = 1 Then
MouseLButtonDown = True
'鼠標左鍵按下
End If
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If MouseLButtonDown Then
Form1.Left = FormP.X + (X - MouseP.X) '移動窗體
Form1.Top = FormP.Y + (Y - MouseP.Y)
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
MouseLButtonDown = False
'鼠標左鍵彈起
End Sub
上述方法不是很完善,制作出的窗體被拖動時,窗體會隨鼠標的移動而移動。而在默認的Windows設置中拖動窗體時,被拖動的窗體不會隨窗體的移動而移動,隨窗體移動的僅是一個與窗體形狀、大小一樣的虛框,只有釋放鼠標后,窗體才會移動到釋放鼠標時虛框的所在處。要實現(xiàn)這種效果,請看第二種方法。
方法二
這種方法通過消息的發(fā)送實現(xiàn)移動無標題窗體。當鼠標按下、移動或釋放時,將鼠標在窗體上按下的消息(消息值為HTCAPTION)發(fā)出,就可以拖動窗體了。代碼如下:
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 Long
Private Const WM_NCLBUTTONDOWN = &&HA1
Private Const HTCAPTION = 2
'以上API函數(shù)和常數(shù)的聲明可在VB自帶的“API 瀏覽器”中找到
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'在窗體的MouseDown事件中添加以下代碼
If Button = 1 Then
Call ReleaseCapture
Call SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0)
End If
End Sub
Private Sub Command1_Click()
End '退出程序
End Sub
這種方法實現(xiàn)起來比第一種方法更容易,只有幾行代碼,并且沒有那么多的變量,窗體被拖動時與普通窗體一樣,只有一個虛框隨鼠標的移動而移動,當釋放鼠標時窗體才移動到相應的位置。用到了兩個API函數(shù)。
以上程序在VB 6.0和Windows 98SE下調試通過。
------------------------------- · 相關文檔瀏覽 · --------------------------------------------------------------------- · 熱門文檔瀏覽 · -------------------------------------