建立一个模块(如下)
Option Explicit
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
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
Private Const GWL_WNDPROC = -4Private OldFrmProc As Long
Private hFrmWnd As LongPublic Sub HookFrm(FrmhWnd As Long)
hFrmWnd = FrmhWnd
OldFrmProc = SetWindowLong(hFrmWnd, GWL_WNDPROC, AddressOf FrmMsg)
End SubPublic Sub UnHookFrm()
Call SetWindowLong(hFrmWnd, GWL_WNDPROC, OldFrmProc)
End SubPublic Function FrmMsg(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Debug.Print "&H" + Hex$(uMsg)
Select Case uMsg
Case ……
……
Case Else
FrmMsg = CallWindowProc(FrmCboProc, hwnd, uMsg, wParam, lParam)
End Select
End Function注意:
在Form_Load中加入“HookFrm Me.hWnd”
在Form_UnLoad中加入“UnHookFrm Me.hWnd”
在FrmMsg中处理消息
Option Explicit
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
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
Private Const GWL_WNDPROC = -4Private OldFrmProc As Long
Private hFrmWnd As LongPublic Sub HookFrm(FrmhWnd As Long)
hFrmWnd = FrmhWnd
OldFrmProc = SetWindowLong(hFrmWnd, GWL_WNDPROC, AddressOf FrmMsg)
End SubPublic Sub UnHookFrm()
Call SetWindowLong(hFrmWnd, GWL_WNDPROC, OldFrmProc)
End SubPublic Function FrmMsg(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Debug.Print "&H" + Hex$(uMsg)
Select Case uMsg
Case ……
……
Case Else
FrmMsg = CallWindowProc(FrmCboProc, hwnd, uMsg, wParam, lParam)
End Select
End Function注意:
在Form_Load中加入“HookFrm Me.hWnd”
在Form_UnLoad中加入“UnHookFrm Me.hWnd”
在FrmMsg中处理消息
FrmMsg = CallWindowProc(FrmCboProc, hwnd, uMsg, wParam, lParam)
应是:
FrmMsg = CallWindowProc(OldFrmProc, hwnd, uMsg, wParam, lParam)吧!