读书人

access中vba 屏蔽鼠标滚轮事件进入死

发布时间: 2012-02-20 21:18:24 作者: rapoo

求助:access中vba 屏蔽鼠标滚轮事件,进入死循环
'---------------------------
' form1中的代码:
'---------------------------
Private Sub Form_Load()
' Timer1_Timer
RegisterWindow Me.hwnd
End Sub

Private Sub Form_Unload(Cancel As Integer)
unRegisterWindow Me.hwnd
End Sub

'---------------------------
' modual1中的代码:
'---------------------------
Public Const GWL_WNDPROC As Long = (-4)
Public Const WM_MOUSEWHEEL As Long = &H20A


Public Declare Function FindWindow Lib "user32 " Alias "FindWindowA " (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SendMessage Lib "user32 " Alias "SendMessageA " (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
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 Declare Function RegisterWindowMessage Lib "user32 " Alias "RegisterWindowMessageA " (ByVal lpString As String) As Long

Public oldproc As Long

Public Function RegisterWindow(hwnd As Long) As Long
If hwnd <> 0 Then
oldproc = SetWindowLong(hwnd, -4, AddressOf WndProc)
End If
End Function

Public Function unRegisterWindow(hwnd As Long) As Long

If hwnd <> 0 Then
SetWindowLong hwnd, -4, oldproc
End If

End Function

Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

'这个函数打印到15的时候就进入死循环了:::::::::::
Debug.Print "Msg= " & Msg

If Msg = WM_MOUSEWHEEL Then
'///// 我想在这里屏蔽掉 鼠标滚轮事件,不想处理他
'写下事件


If wParam > 0 Then '正数是上
'SendKeys "{PGUP} "
Debug.Print "WM_MOUSEWHEEL up "
MsgBox "WM_MOUSEWHEEL up "
Else
'SendKeys "{PGDN} "
MsgBox "WM_MOUSEWHEEL down "
Debug.Print "WM_MOUSEWHEEL down "
End If

'WndProc = -1
'WndProc = CallWindowProc(WndProc, hwnd, Msg, wParam, lParam)
Else
WndProc = CallWindowProc(WndProc, hwnd, Msg, wParam, lParam)
End If
End Function


'------------------------------------------
上面WndProc函数设置断点后的调试结果:
Msg=1533
Msg=13
Msg=127
Msg=70
Msg=34
Msg=71
Msg=70
Msg=34
Msg=1529
Msg=15
Msg=15
Msg=15
...
之后全是Msg=15 ,而且是死循环,form怎么都显示不出来,一直打印15。

请问这是怎么回事?


[解决办法]
用api禁止鼠标滚轮
专题地址:
http://access911.net/?kbid;73FAB71E1ADC

读书人网 >VB

热点推荐