Public prevWndProc As Long public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, lParam As Long) As Long Select Case Msg Case WM_COMMAND If wParam \ 65536 = CBN_CLOSEUP Then If lParam = Form1.Combo1.hwnd Then Form1.Text1 = "CloseUp" End If End If Case Else CallWindowProc prevWndProc, hwnd, Msg, wParam, lParam End Select
End Function Public Sub main() Load Form1 prevWndProc = GetWindowLong(Form1.hwnd, GWL_WNDPROC) SetWindowLong Form1.hwnd, GWL_WNDPROC, AddressOf WndProc End Sub
这一句的最后一个参数错了,不能采用地址传递,应为值传递Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, lParam As Long) As Long改为Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long,ByVal lParam As Long) As Long就行了。
实在看不出有什么问题,请各位帮帮眼,谢谢了!
public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, lParam As Long) As Long
Select Case Msg
Case WM_COMMAND
If wParam \ 65536 = CBN_CLOSEUP Then
If lParam = Form1.Combo1.hwnd Then
Form1.Text1 = "CloseUp"
End If
End If
Case Else
CallWindowProc prevWndProc, hwnd, Msg, wParam, lParam
End Select
End Function
Public Sub main()
Load Form1
prevWndProc = GetWindowLong(Form1.hwnd, GWL_WNDPROC)
SetWindowLong Form1.hwnd, GWL_WNDPROC, AddressOf WndProc
End Sub