新建一个窗体,一个模块,窗体中放入两个textbox,Text1和Text2,在窗体中写入下面的代码
Private Sub Form_Load()
Text1 = 0
Text2 = 0
'È¡µÃText1¿Ø¼þµÄ¾ä±ú
hwndTextBox1 = Text1.hwnd
hwndTextBox2 = Text2.hwnd
'±£´æText1¿Ø¼þµÄĬÈÏ´°¿ÚÏûÏ¢´¦Àíº¯ÊýµØÖ·
OldWindowProc = GetWindowLong(Text1.hwnd, GWL_WNDPROC)
'½«Text1¿Ø¼þµÄÏûÏ¢´¦Àíº¯ÊýÖ¸¶¨Îª×Ô¶¨Ò庯ÊýNewWindowProc
Call SetWindowLong(Text1.hwnd, GWL_WNDPROC, AddressOf NewWindowProc)
End Sub
在模块中写入以下代码
Option Explicit
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 GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) 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 Const GWL_WNDPROC = -4&
Public Const WM_MOUSEWHEEL = &H20A
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Public Type POINTAPI
x As Long
y As Long
End Type
Public OldWindowProc As Long 'ÓÃÀ´±£´æϵͳĬÈϵĴ°¿ÚÏûÏ¢´¦Àíº¯ÊýµÄµØÖ·
Public hwndTextBox1 As Long 'ÓÃÀ´±£´æText1¿Ø¼þµÄ¾ä±ú
Public hwndTextBox2 As Long 'ÓÃÀ´±£´æText2¿Ø¼þµÄ¾ä±ú
'×Ô¶¨ÒåµÄÏûÏ¢´¦Àíº¯Êý
Public Function NewWindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error Resume Next
If Msg = WM_MOUSEWHEEL Then
'ÏÂÃæµÃµ½Êó±êλÖô¦µÄ¶ÔÏóµÄ¾ä±ú
Dim CurPoint As POINTAPI, hwndUnderCursor As Long
GetCursorPos CurPoint
hwndUnderCursor = WindowFromPoint(CurPoint.x, CurPoint.y)
'Èç¹ûÊó±êλÓÚForm1.Text1ÄÚ²¿£¬Ôò¶ÔÊó±ê¹öÂÖʼþ½øÐд¦Àí
If hwndUnderCursor = hwndTextBox1 Then
If wParam = -7864320 Then 'ÏòϹö¶¯
Form1.Text1 = CInt(Form1.Text1) - 1
ElseIf wParam = 7864320 Then 'ÏòÉϹö¶¯
Form1.Text1 = CInt(Form1.Text1) + 1
End If
ElseIf hwndUnderCursor = hwndTextBox2 Then
If wParam = -7864320 Then 'ÏòϹö¶¯
Form1.Text2 = CInt(Form1.Text2) - 1
ElseIf wParam = 7864320 Then 'ÏòÉϹö¶¯
Form1.Text2 = CInt(Form1.Text2) + 1
End If
End If
Else
'µ÷ÓÃText1µÄĬÈÏ´°¿ÚÏûÏ¢´¦Àíº¯Êý
NewWindowProc = CallWindowProc(OldWindowProc, hwnd, Msg, wParam, lParam)
End If
End Function
运行时把鼠标放在两个textbox中,然后滚动鼠标滚轮,看看效果。
PS:模块中的代码不能放在窗体里