Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _
ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private WithEvents mMousewheel As clsMouseWheel
Private bMouseIn As Boolean
Public hWnd As Long
Private Sub UserForm_Activate()
hWnd = FindWindow("ThunderDFrame", Me.Caption)
Set MouseWheel = New clsMouseWheel
Set mMousewheel = MouseWheel
For i = 1 To 20
Me.ListBox1.AddItem "Item " & i
Next i
LocalPrevWndProc = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)
bMouseIn = True
End Sub
Private Sub mMousewheel_Rotation(bUp As Boolean)
If bMouseIn Then
With Me
If bUp Then
If .ListBox1.TopIndex > 0 Then
If .ListBox1.TopIndex > 3 Then
.ListBox1.TopIndex = ListBox1.TopIndex - 3
Else
.ListBox1.TopIndex = 0
End If
End If
Else
.ListBox1.TopIndex = ListBox1.TopIndex + 3
End If
End With
End If
End Sub
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)
bMouseIn = False
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
WheelUnHook
End Sub
Private Sub UserForm_Deactivate()
WheelUnHook
End Sub
Private Sub WheelUnHook()
Dim WorkFlag As Long
On Error Resume Next
WorkFlag = SetWindowLong(Me.hWnd, GWL_WNDPROC, LocalPrevWndProc)
Set MouseWheel = Nothing
End Sub