首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

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

2012-02-20 
求助:access中vba 屏蔽鼠标滚轮事件,进入死循环---------------------------form1中的代码:--------------

求助: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

热点排行