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 GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex 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 = (-4)
Private Const WM_MOUSEMOVE = 512
Private Const WM_RBUTTONDOWN = &H204
Private preWinProc As Long
Private Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_RBUTTONDOWN Then
MsgBox "你好,鼠标右击消息!"
Else
wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End If
End Function
Private Sub EndSubclass()
Dim ret As Long
ret = SetWindowLong(Combo1.hwnd, GWL_WNDPROC, preWinProc)
End Sub
Private Sub Form_Load()
Combo1.ListIndex = 0
Dim ret As Long
preWinProc = GetWindowLong(Combo1.hwnd, GWL_WNDPROC)
ret = SetWindowLong(Combo1.hwnd, GWL_WNDPROC, AddressOf wndproc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call EndSubclass
End Sub
当执行到formload的时候,出现编译错误(Ivalid use of AddressOf operator),如何解决这个问题,请不要使用模块(在模块中定义没有问题)
(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex 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 = (-4)
Private Const WM_MOUSEMOVE = 512
Private Const WM_RBUTTONDOWN = &H204
Private preWinProc As Long
Private Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_RBUTTONDOWN Then
MsgBox "你好,鼠标右击消息!"
Else
wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End If
End Function
Private Sub EndSubclass()
Dim ret As Long
ret = SetWindowLong(Combo1.hwnd, GWL_WNDPROC, preWinProc)
End Sub
Private Sub Form_Load()
Combo1.ListIndex = 0
Dim ret As Long
preWinProc = GetWindowLong(Combo1.hwnd, GWL_WNDPROC)
ret = SetWindowLong(Combo1.hwnd, GWL_WNDPROC, AddressOf wndproc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call EndSubclass
End Sub
当执行到formload的时候,出现编译错误(Ivalid use of AddressOf operator),如何解决这个问题,请不要使用模块(在模块中定义没有问题)
你看一下回调函数申明是否正确