晕,子类化在VB里是最常见的一种技术了。'模块里的代码 Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public 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 OldWndProc& Public Sub NewWndFunc(ByVal Hwndl&) OldWndProc = SetWindowLong(Hwndl, GWL_WNDPROC, AddressOf txtWndProc)’返回 窗口的默认窗口函数的地址,以便恢复 End Sub Public Sub OldWndFunc(ByVal Hwndl&)' 恢复窗口的默认窗口函数 SetWindowLong Hwndl, GWL_WNDPROC, OldWndProc End Sub Public Function MyWndProc&(ByVal NewHwnd&,ByVal uMsg&, ByVal wParam&, ByVal lParam&) Select Case uMsg Case 你要自己处理的消息,比如WM_CLICK等等 Case Else MyWndProc= CallWindowProc(OldWndProc, NewHwnd, uMsg, wParam, lParam) End Select End Function '窗体里的代码 Private Sub Form_Load() NewWndFunc 你的控件.hwnd End Sub '最好加上这个代码 Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) OldWndFunc Text1.hwnd End Sub
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public 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 OldWndProc& Public Sub NewWndFunc(ByVal Hwndl&)
OldWndProc = SetWindowLong(Hwndl, GWL_WNDPROC, AddressOf txtWndProc)’返回 窗口的默认窗口函数的地址,以便恢复
End Sub Public Sub OldWndFunc(ByVal Hwndl&)' 恢复窗口的默认窗口函数
SetWindowLong Hwndl, GWL_WNDPROC, OldWndProc
End Sub Public Function MyWndProc&(ByVal NewHwnd&,ByVal uMsg&, ByVal wParam&, ByVal lParam&)
Select Case uMsg
Case 你要自己处理的消息,比如WM_CLICK等等
Case Else
MyWndProc= CallWindowProc(OldWndProc, NewHwnd, uMsg, wParam, lParam)
End Select
End Function '窗体里的代码
Private Sub Form_Load()
NewWndFunc 你的控件.hwnd
End Sub '最好加上这个代码
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
OldWndFunc Text1.hwnd
End Sub