什麼時候需要這個功能, 例如ACDSee的Thumbnail縮略圖超過範圍時可透過滑鼠中鍵捲動範圍,
可透過MouseWheel事件取得, 然而在Panel中該事件並無作用, 因此必須透過其他
方法實現這個功能, 透過建立一個訊息篩選介面取得MouseWheel訊息, 並藉由Panel原生屬性AutoScrollPosition.
取得捲動方向, 當向下捲動時Y為負數反之為正數
Public Class PanelEx
Inherits System.Windows.Forms.Panel
Implements IMessageFilter
Public Sub New()
Application.AddMessageFilter(Me)
End Sub
Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
If m.Msg = 522 Then '取得MouseWheel事件
Dim _myPoint As Point = PointToScreen(New Point(0, 0))
Dim _curPoint As Point = Cursor.Position
'確保游標在指定控制項中
If _curPoint.X > _myPoint.X AndAlso _curPoint.Y > _myPoint.Y AndAlso _curPoint.X < _myPoint.X + Width AndAlso _curPoint.Y < _myPoint.Y + Height Then
If m.WParam.ToInt32 > 0 Then
AutoScrollPosition = New Point(AutoScrollPosition.X, (AutoScrollPosition.Y + 10) * -1) '上捲
Else
AutoScrollPosition = New Point(AutoScrollPosition.X, (AutoScrollPosition.Y - 10) * -1) '下捲
End If
End If
End If
Return False
End Function
End Class