新建一个工程,添加2个窗体(Form1.frm和Form2.frm),添加1个模块(Module1.bas)。
实现目的:Form2停靠在Form1的右侧,移动Form1时Form2跟随移动。
代码:(Form2中无代码,代码写在Form1中和Module1中)
'**************************************************
'窗体代码:Form1.frm
'**************************************************
Option Explicit
Private Const GWL_WNDPROC = (-4)
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Sub Form_Load()
Form2.Show
Call ChangeForm2Pos
PrevWnd = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WndCallbackProc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Unload Form2
SetWindowLong Me.hwnd, GWL_WNDPROC, PrevWnd
End Sub
'**************************************************
'模块代码:Module1.bas
'**************************************************
Option Explicit
Private Const WM_MOVE = &H3
Private 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 PrevWnd As Long
Public Function WndCallbackProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If uMsg = WM_MOVE Then
Call ChangeForm2Pos
End If
WndCallbackProc = CallWindowProc(PrevWnd, hwnd, uMsg, wParam, lParam)
End Function
Public Sub ChangeForm2Pos()
With Form2
.Left = Form1.Left + Form1.Width
.Top = Form1.Top
End With
End Sub
转载于:https://blog.51cto.com/yerik/678019