Сообщение WM_MOUSEWHEEL

Const WM_MOUSEWHEEL = &H20A

Сообщение WM_MOUSEWHEEL посылается окну, имеющему фокус при прокрутке колесика мыши, через функцию обратного вызова WindowProc


Возвращаемое значение

Если приложение обработало это сообщение, то возвращается 0

Параметры

wParam
Комбинация следующих флагов показывает нажатия клавиш во время отправки сообщения:
MK_CONTROL = &H8
Нажата клавиша Ctrl
MK_LBUTTON = &H1
Нажата левая кнопка мыши
MK_MBUTTON = &H10
Нажата средняя кнопка мыши
MK_RBUTTON = &H2
Нажата правая кнопка мыши
MK_SHIFT = &H4
Нажата клавиша Shift
MK_XBUTTON1 = &H20
Windows 2000: Нажата первая кнопка X
MK_XBUTTON2 = &H40
Windows 2000: Нажата вторая кнопка X
lParam
Координаты (x,y) курсора мыши относительно окна. Младшее слово содержит координату x, а старшее слово содержит координату y

Пример

' Перемещаем форму по экрану при помощи колесика мыши
' Поместите код в модуль,
' т.к. используется функция обратного вызова
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
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

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

Dim PrevProc As Long

Public Sub HookForm(Button As Long) PrevProc = SetWindowLong(Button, GWL_WNDPROC, AddressOf WindowProc) End Sub
Public Sub UnHookForm(Button As Long) SetWindowLong Button, GWL_WNDPROC, PrevProc End Sub
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long ' Скроллируем форму. wParam - величина перемещения If uMsg = WM_MOUSEWHEEL Then Form1.scrollmove (wParam) End If WindowProc = CallWindowProc( _ PrevProc, hwnd, uMsg, wParam, lParam) End Function
' Поместите код для Form1 Private Sub Form_Load() HookForm Me.hwnd End Sub
Private Sub Form_Unload(Cancel As Integer) UnHookForm Me.hwnd End Sub
Public Sub scrollmove(wParam As Long) ' Ограничим перемещение формы до края экрана ' Также отслеживаем состояние формы. ' Если окно развернуто, то не двигаем форму If Me.WindowState = vbMaximized Then Exit Sub If wParam < 0 Then If Me.Top <= 60 Then Me.Top = 0 Exit Sub Else Me.Top = Me.Top - 200 End If Else If (Screen.Height - Me.Top) <= Me.Height Then Me.Top = Screen.Height - Me.Height Else Me.Top = Me.Top + 200 End If End If End Sub

Категория

Мышь