Функция WM_MOUSEWHEEL

 ↑  ←  Описание функции


WM_MOUSEWHEEL

Сообщение выполняется при вращении колёсика мыши.

Параметры

Указанные параметры передаются системой.
$wParam Содержит комбинацию одновременно нажатых клавиш:
    младшее слово
        MK_CONTROL = 0x8
        MK_LBUTTON = 0x1
        MK_MBUTTON = 0x10
        MK_RBUTTON = 0x2
        MK_SHIFT = 0x4
        MK_XBUTTON1 = 0x20
        MK_XBUTTON2 = 0x40
    старшее слово
        120 - вращение вверх
        -120 - вращение вниз
$lParam Двойное слово содержит:
    младшее слово = X - координата мыши относительно экрана
    старшее слово = Y - координата мыши относительно экрана

Примечания

Смотрите функцию GUIRegisterMsg.

Пример

Global Const $MK_CONTROL = 0x8
Global Const $MK_LBUTTON = 0x1
Global Const $MK_MBUTTON = 0x10
Global Const $MK_RBUTTON = 0x2
Global Const $MK_SHIFT = 0x4
Global Const $MK_XBUTTON1 = 0x20
Global Const $MK_XBUTTON2 = 0x40

Global $k1 = 0
Global $k2 = 0
Global Const $WM_MOUSEWHEEL = 0x020A

GUIRegisterMsg(0x020A, "WM_MOUSEWHEEL")
$Gui = GUICreate("WM_MOUSEWHEEL", 370, 200)
GUICtrlCreateLabel('Функция WM_MOUSEWHEEL выполняется при вращения колёсика мыши. Удерживайте Ctrl, Shift и кнопки мыши при вращении колёсика.', 5, 5, 360, 34)
$Label1 = GUICtrlCreateLabel("колесо мыши сдвинулось вверх 0 раз", 20, 45, 226, 17)
$Label2 = GUICtrlCreateLabel("колесо мыши сдвинулось вниз   0 раз", 20, 62, 226, 17)
$Label3 = GUICtrlCreateLabel("", 10, 80, 360, 115)
$Input = GUICtrlCreateInput("", 240, 50, 100, 21)
GUISetState()

Do
Until GUIGetMsg() = -3

Func WM_MOUSEWHEEL($hWndGui, $MsgId, $wParam, $lParam)
    Local $Delta, $key, $X, $Y
    $Delta = BitShift($wParam, 16) ; _WinAPI_HiWord
    $key = _KeysHeld(BitAND($wParam, 0xFFFF)) ; _WinAPI_LoWord
    $X = BitAND($lParam, 0xFFFF) ; _WinAPI_LoWord
    $Y = BitShift($lParam, 16) ; _WinAPI_HiWord

    ; Одновременно нажатые клавиши
    If $key Then
        $key = @LF & 'Одновременно удерживаемые клавиши:' & @LF & $key
    Else
        $key = ''
    EndIf

    GUICtrlSetData($Label3, "Delta: " & $Delta & ",     X: " & $X & ", Y: " & $Y & $key)

    If $Delta > 0 Then
        $k1 += 1
        GUICtrlSetData($Label1, 'колесо мыши сдвинулось вверх ' & $k1 & ' раз')
        WinSetTitle($Gui, '', 'вверх ' & $k1 & ' раз, вниз ' & $k2 & ' раз')
        GUICtrlSetData($Input, $k1 & ' - ' & $k2 & ' = ' & $k1 - $k2)
    Else
        $k2 += 1
        GUICtrlSetData($Label2, 'колесо мыши сдвинулось вниз   ' & $k2 & ' раз')
        WinSetTitle($Gui, '', 'вверх ' & $k1 & ' раз, вниз ' & $k2 & ' раз')
        GUICtrlSetData($Input, $k1 & ' - ' & $k2 & ' = ' & $k1 - $k2)
    EndIf
EndFunc

Func _KeysHeld($iKeys)
    Local $sKeyHeld
    If BitAND($iKeys, $MK_CONTROL) Then $sKeyHeld &= 'CTRL' & @LF
    If BitAND($iKeys, $MK_LBUTTON) Then $sKeyHeld &= 'Левая кнопка мыши' & @LF
    If BitAND($iKeys, $MK_MBUTTON) Then $sKeyHeld &= 'Средняя кнопка мыши' & @LF
    If BitAND($iKeys, $MK_RBUTTON) Then $sKeyHeld &= 'Правая кнопка мыши' & @LF
    If BitAND($iKeys, $MK_SHIFT) Then $sKeyHeld &= 'SHIFT' & @LF
    If BitAND($iKeys, $MK_XBUTTON1) Then $sKeyHeld &= 'Windows 2000/XP: Первая X кнопка' & @LF
    If BitAND($iKeys, $MK_XBUTTON2) Then $sKeyHeld &= 'Windows 2000/XP: Вторая X кнопка' & @LF
    Return $sKeyHeld
EndFunc