在VisualBasic中如何拖動窗體或控件?
"目前的許多 windows 下的應用程序,都采用了圖形化的界面,可是在這樣的界面下就不能用 Windows 原來的標題條了,否則會影響界面的美觀。那么在木有標題條的情形下怎么用鼠標拖動窗體或其它的控件呢?
其實,采用 API 函數調出使用很容易實現,下邊我們以拖動窗體 Form1 為例來具體講一下實現方法:
1、新建立1個項目,名稱為 test.VBp;
2、填加1個模塊,名稱為 test.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 WM_SYSCOMMAND = &H112
Public Const SC_MOVE = &HF012
其中 ReleaseCapture 函數是用來釋放鼠標捕獲的,SendMessage 函數是1個在 Windows API 中非常重要的函數,在這里的作用是用來向 Windows 發送移動窗體的消息。WM_SYSCOMMAND 是向 Windows 發送消息的常量。SC_MOVE 是控制移動窗體的常量。請注意:這里 SC_MOVE 的賦值是 &HF012,表示鼠標對象。
3、在窗體的 MouseDown 過程中加入以下代碼:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
ReleaseCapture
SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
End Sub
其中 ReleaseCapture 函數用來釋放鼠標捕獲,SendMessage 函數向 Windows 發送移動窗體的消息。
4、保存并運行程序,按下鼠標,你會發現窗體會隨著鼠標的移動而移動。
以上講述了怎么在 VB 中用鼠標拖動窗體,其實,控件的拖動的原理是一樣的。例如以下代碼可以實現圖框的拖動:
ReleaseCapture
SendMessage Picture1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0"