模块代码:
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public Const WM_MOUSEMOVE = &H200
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_MENUSELECT = &H11F
Public preWinProc As Long
Public Function wndproc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error GoTo acd
Select Case Msg
Case 534
Form1.Text1.Width = Form1.Command1.Left - Form1.Text1.Left
Form1.Text2.Width = (Form1.Text2.Width + Form1.Text2.Left) - (Form1.Command1.Left + Form1.Command1.Width)
Form1.Text2.Left = Form1.Command1.Left + Form1.Command1.Width
Case Else '否则送到原来的处理函数
wndproc = CallWindowProc(preWinProc, hWnd, Msg, wParam, lParam)
End Select
Exit Function
acd:
wndproc = CallWindowProc(preWinProc, hWnd, Msg, wParam, lParam)
End Function
'窗体代码(一个command控件,名为Command1,两个textbox控件,名分别是Text1和Text2)
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 HTCAPTION = 2
Private Const WM_NCLBUTTONDOWN = &HA1
Sub Form_Load()
Dim ret As Long
preWinProc = GetWindowLong(Command1.hWnd, GWL_WNDPROC) '记录原本的Window Procedure的位址
ret = SetWindowLong(Command1.hWnd, GWL_WNDPROC, AddressOf wndproc) '将处理的函数地址改为自己的处理函数地址
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim ret As Long
ret = SetWindowLong(Command1.hWnd, GWL_WNDPROC, preWinProc) '取消Message的截取,而使之又只送往原来的Window Procedure
End Sub
Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
ReleaseCapture
SendMessage Command1.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
End If
End Sub