End IfEnd SubPrivate Sub Form_Load()St = -1 Me.Caption = "准备完毕"End SubPrivate Sub Form_Unload(Cancel As Integer)If St <> -1 Then SetWindowLong Text1.Hwnd, GWL_WNDPROC, PrevWndProc End IfEnd SubPrivate Sub Timer1_Timer()Select Case MouseW Case 1 Label1.Caption = "向上滚动" Case -1 Label1.Caption = "向下滚动" Case Else Label1.Caption = "滚轮静止" End SelectMouseW = 0End Sub
以下保存为ModWndProc.bas:Attribute VB_Name = "ModWndProc" '************************************************************************* '**说 明:紫水晶工作室 http://www.m5home.com/ '**创 建 人:马大哈 '**日 期:2005年04月13日 '**描 述:一个使用子类技术得到鼠标滚轮状态的简单例子 '************************************************************************* Option ExplicitPublic 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 Const GWL_WNDPROC = (-4) Public Const WM_GETTEXT = &HD Public Const WM_MOUSEWHEEL = &H20APublic PrevWndProc As Long Public MouseW As LongPublic Function SubWndProc(ByVal Hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As LongSelect Case MSG '在这里进行过滤.如果知道其他的消息,也可以在这里过滤. Case WM_MOUSEWHEEL
If wParam > 0 Then MouseW = 1 ElseIf wParam < 0 Then MouseW = -1 End If
End SelectSubWndProc = CallWindowProc(PrevWndProc, Hwnd, MSG, wParam, lParam) '其它消息不管End Function我的域名这几天出了问题....晕倒你用记事本保存它们为相应的文件,然后打开看看.这里面就是使用子类化来拦截了鼠标滚轮的消息.至于滚轮按下,你得自己查查是什么消息,我这里现在没有VB,没办法
Form=FrmWndProc.frm
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\WINDOWS\system32\stdole2.tlb#OLE Automation
Module=ModWndProc; ModWndProc.bas
IconForm="FrmWndProc"
Startup="FrmWndProc"
HelpFile=""
ExeName32="MouseWheel.exe"
Command32=""
Name="MouseWheel"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1[MS Transaction Server]
AutoRefresh=1以下保存为FrmWndProc.frm:VERSION 5.00
Begin VB.Form FrmWndProc
BorderStyle = 3 'Fixed Dialog
Caption = "Form1"
ClientHeight = 1290
ClientLeft = 45
ClientTop = 330
ClientWidth = 4005
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 1290
ScaleWidth = 4005
StartUpPosition = 2 'CenterScreen
Begin VB.CommandButton Command1
Caption = "开始"
Height = 375
Left = 405
TabIndex = 1
Top = 450
Width = 3210
End
Begin VB.Timer Timer1
Interval = 100
Left = 5130
Top = 3015
End
Begin VB.TextBox Text1
Alignment = 2 'Center
Appearance = 0 'Flat
Height = 285
IMEMode = 3 'DISABLE
Left = 405
Locked = -1 'True
TabIndex = 0
Text = "在这里滚动滚轮看看"
Top = 135
Width = 3210
End
Begin VB.Label Label1
Alignment = 2 'Center
Caption = "Label1"
Height = 195
Left = 720
TabIndex = 2
Top = 945
Width = 2310
End
End
Attribute VB_Name = "FrmWndProc"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'*************************************************************************
'**说 明:紫水晶工作室 http://www.m5home.com/
'**创 建 人:马大哈
'**日 期:2005年04月13日
'**描 述:一个使用子类技术得到鼠标滚轮状态的简单例子
'*************************************************************************
Option ExplicitDim St As LongPrivate Sub Command1_Click()
'这里是对Text1进行子类化处理
If St = -1 Then PrevWndProc = SetWindowLong(Text1.Hwnd, GWL_WNDPROC, AddressOf SubWndProc)
Command1.Caption = "停止"
St = 1
Me.Caption = "子类处理状态!"
Else SetWindowLong Text1.Hwnd, GWL_WNDPROC, PrevWndProc
Command1.Caption = "开始"
St = -1
Me.Caption = "正常状态"
End IfEnd SubPrivate Sub Form_Load()St = -1
Me.Caption = "准备完毕"End SubPrivate Sub Form_Unload(Cancel As Integer)If St <> -1 Then
SetWindowLong Text1.Hwnd, GWL_WNDPROC, PrevWndProc
End IfEnd SubPrivate Sub Timer1_Timer()Select Case MouseW
Case 1
Label1.Caption = "向上滚动"
Case -1
Label1.Caption = "向下滚动"
Case Else
Label1.Caption = "滚轮静止"
End SelectMouseW = 0End Sub
'*************************************************************************
'**说 明:紫水晶工作室 http://www.m5home.com/
'**创 建 人:马大哈
'**日 期:2005年04月13日
'**描 述:一个使用子类技术得到鼠标滚轮状态的简单例子
'*************************************************************************
Option ExplicitPublic 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 Const GWL_WNDPROC = (-4)
Public Const WM_GETTEXT = &HD
Public Const WM_MOUSEWHEEL = &H20APublic PrevWndProc As Long
Public MouseW As LongPublic Function SubWndProc(ByVal Hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As LongSelect Case MSG '在这里进行过滤.如果知道其他的消息,也可以在这里过滤. Case WM_MOUSEWHEEL
If wParam > 0 Then
MouseW = 1
ElseIf wParam < 0 Then
MouseW = -1
End If
End SelectSubWndProc = CallWindowProc(PrevWndProc, Hwnd, MSG, wParam, lParam) '其它消息不管End Function我的域名这几天出了问题....晕倒你用记事本保存它们为相应的文件,然后打开看看.这里面就是使用子类化来拦截了鼠标滚轮的消息.至于滚轮按下,你得自己查查是什么消息,我这里现在没有VB,没办法