« トップページにTooltip (jQueryを使ったオリジナル) | トップページ | シェル拡張-エクスプローラのコンテキストメニューを拡張 [1] »

2009年3月15日 (日)

VB6アプリでマウスホイールを使う。

VB6アプリケーション内でマウスメッセージをフックすることによりマウスホイールをサポートする方法。

参考:MSDNの「[VB] AddressOf 演算子を使って Windows のメッセージをフックする方法 文書番号: J042844」

標準モジュール:

Declare Function CallWindowProc Lib "user32" Alias _
   "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
   ByVal hMainWnd As Long, ByVal Msg As Long, _
   ByVal wParam As Long, ByVal lParam As Long) As Long

Declare Function SetWindowLong Lib "user32" Alias _
   "SetWindowLongA" (ByVal hMainWnd As Long, _
   ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Const GWL_WNDPROC = -4
Public Const WM_MOUSEWHEEL = &H20A

Global lpPrevWndProc As Long
Global hMainWnd As Long

Dim WheelCounter As Integer

' VBのFORMのloadイベントで実行
Public Sub Hook()
    lpPrevWndProc = SetWindowLong(hMainWnd, GWL_WNDPROC, AddressOf WndProc)
    WheelCounter = 0
End Sub

' VBのFORMのunloadイベントで実行
Public Sub Unhook()
    Dim temp As Long
    temp = SetWindowLong(hMainWnd, GWL_WNDPROC, lpPrevWndProc)
End Sub

' ウインドウプロシージャ(WM_MOUSEWHEELメッセージだけ独自に処理し、その他のメッセージは元々の処理に任せる。
Function WndProc(ByVal hw As Long, ByVal uMsg As _
       Long, ByVal wParam As Long, ByVal lParam As Long) As Long
   
    Select Case uMsg
    Case WM_MOUSEWHEEL
        If HiWord(wParam) > 0 Then      ' 前へ回す
            WheelCounter = WheelCounter + 1
        Else    ' 後ろ(手前)へ回す
            WheelCounter = WheelCounter - 1
        End If
        ' FORM上のTextBoxに"回転数"を表示
        frmTestWheel.Text1.Text = Str(WheelCounter)
        WndProc = 0
    Case Else
        WndProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
    End Select
End Function

' Win32のHIWORDマクロのVB版
' MSDNの 「HOWTO: Package HiWord/LoWord Values Into a Long Parameter  ID: Q189170」
Function HiWord(DWord As Long) As Integer
      HiWord = (DWord And &HFFFF0000) \ &H10000
End Function

フォームモジュール:

Private Sub Form_Load()
    hMainWnd = Me.hWnd
    Hook
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Unhook
End Sub

« トップページにTooltip (jQueryを使ったオリジナル) | トップページ | シェル拡張-エクスプローラのコンテキストメニューを拡張 [1] »

ソフトウエア」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: VB6アプリでマウスホイールを使う。:

« トップページにTooltip (jQueryを使ったオリジナル) | トップページ | シェル拡張-エクスプローラのコンテキストメニューを拡張 [1] »