求助:access中vba 屏蔽鼠标滚轮事件,进入死循环

zsx0077133 2007-03-12 02:20:55
'---------------------------
' 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。

请问这是怎么回事?
...全文
442 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
HSMG1234554321 2010-12-09
  • 打赏
  • 举报
回复
也遇到了这个问题……
zsx0077133 2007-05-07
  • 打赏
  • 举报
回复
非常好!
谢谢楼上的!
沐NeMo 2007-03-13
  • 打赏
  • 举报
回复
用api禁止鼠标滚轮
专题地址:
http://access911.net/?kbid;73FAB71E1ADC
zsx0077133 2007-03-12
  • 打赏
  • 举报
回复
WndProc = CallWindowProc(WndProc, hwnd, Msg, wParam, lParam)
改成下面这个后也是死循环:
WndProc = CallWindowProc(oldproc, hwnd, Msg, wParam, lParam)

只是运行结果有点变化:后面全是 Msg=1535
Msg=1535
Msg=1535

?oldproc
-60087