2010年5月15日土曜日

ListBoxがOwnerDrawVariableの時、マウスホイールで逆スクロール対策

ListBoxコントロールで
DrawMode = Windows.Forms.DrawMode.OwnerDrawVariable
を設定した時、マウスホイールのスクロールが一瞬逆スクロールしている現象の対策

    Private Function HIWORD(ByVal intValue As Integer) As Integer
        If (intValue And &H80000000) = &H80000000 Then
            Return (intValue >> 16)
        End If
        Return ((intValue >> 16) And &HFFFF)
    End Function
    Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        Select Case m.Msg
            Case &H20A                                                                          'WM_MOUSEWHEEL
                Dim _d As Integer = HIWORD(m.WParam.ToInt32())
                For _count As Integer = 1 To SystemInformation.MouseWheelScrollLines            'マウスホイールスクロール量(1行ずつ)
                    Me.TopIndex = Math.Max(0, Me.TopIndex + If(_d < 0, 1, -1))
                    Me.Invalidate()
                    Me.Update()
                Next
                Return
        End Select
        MyBase.WndProc(m)
    End Sub

まぁ、1行ずつスクロールするという事だ。

0 件のコメント:

コメントを投稿