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


WM_MOUSEWHEEL

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

Параметры

Указанные параметры передаются системой.
wParam Содержит комбинацию одновременно нажатых клавиш:
    младшее слово
        MK_CONTROL = $8
        MK_LBUTTON = $1
        MK_MBUTTON = $10
        MK_RBUTTON = $2
        MK_SHIFT = $4
        MK_XBUTTON1 = $20
        MK_XBUTTON2 = $40
    старшее слово
        120 - вращение вверх
        -120 - вращение вниз
lParam Двойное слово содержит:
    младшее слово = X - координата мыши относительно экрана
    старшее слово = Y - координата мыши относительно экрана

Примечания

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

Пример



; MK_CONTROL = 0x8
; MK_LBUTTON = 0x1
; MK_MBUTTON = 0x10
; MK_RBUTTON = 0x2
; MK_SHIFT = 0x4
; MK_XBUTTON1 = 0x20
; MK_XBUTTON2 = 0x40
EnableExplicit

#Gui = 0

Enumeration
    #Label1
    #Label2
    #Label3
    #Label4
    #Input
EndEnumeration

Global k1 = 0
Global k2 = 0

Procedure.s _KeysHeld(iKeys)
    Protected sKeyHeld.s
    If iKeys & #MK_CONTROL
        sKeyHeld + "CTRL" + #CRLF$         EndIf
    If iKeys & #MK_LBUTTON
        sKeyHeld + "Левая кнопка мыши" + #CRLF$
    EndIf
    If iKeys & #MK_MBUTTON
        sKeyHeld + "Средняя кнопка мыши" + #CRLF$
    EndIf
    If iKeys & #MK_RBUTTON
        sKeyHeld + "Правая кнопка мыши" + #CRLF$
    EndIf
    If iKeys & #MK_SHIFT
        sKeyHeld + "SHIFT" + #CRLF$
    EndIf
    If iKeys & #MK_XBUTTON1
        sKeyHeld + "Windows 2000/XP: Первая X кнопка" + #CRLF$
    EndIf
    If iKeys & #MK_XBUTTON2
        sKeyHeld + "Windows 2000/XP: Вторая X кнопка" + #CRLF$
    EndIf
    ProcedureReturn sKeyHeld
EndProcedure

Procedure MyWindowCallback(WindowID, Message, wParam, lParam)
    Protected Delta, key.s, X, Y

    Select Message
        Case #WM_MOUSEWHEEL
            Delta = wParam >> 16        ; HiWord
            key = _KeysHeld(wParam & $FFFF) ; LoWord
            X = lParam & $FFFF                ; LoWord
            Y = lParam >> 16                ; HiWord
                         ; Одновременно нажатые клавиши
            If key
                key = #CRLF$ + "Одновременно удерживаемые клавиши:" + #CRLF$ + key
            EndIf
                         SetGadgetText(#Label3, "Delta: " + Delta + ", X: " + X + ", Y: " + Y + key)
                         If Delta > 0
                k1 + 1
                SetGadgetText(#Label1, "колесо мыши сдвинулось вверх " + Str(k1) + " раз")
                SetWindowTitle(#Gui, "вверх " + Str(k1) + " раз, вниз " + Str(k2) + " раз")
                SetGadgetText(#Input, Str(k1) + " - " + Str(k2) + " = " + Str(k1 - k2))
            Else
                k2 + 1
                SetGadgetText(#Label2, "колесо мыши сдвинулось вниз " + Str(k2) + " раз")
                SetWindowTitle(#Gui, "вверх " + Str(k1) + " раз, вниз " + Str(k2) + " раз")
                SetGadgetText(#Input, Str(k1) + " - " + Str(k2) + " = " + Str(k1 - k2))
            EndIf
    EndSelect
    ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

If OpenWindow(#Gui, 0, 0, 370, 200, "WM_MOUSEWHEEL", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget)
    TextGadget(#Label4,5, 5, 360, 34,"Функция WM_MOUSEWHEEL выполняется при вращения колёсика мыши. Удерживайте Ctrl, Shift и кнопки мыши при вращении колёсика.")
    TextGadget(#Label1,20, 45, 226, 17,"колесо мыши сдвинулось вверх 0 раз")
    TextGadget(#Label2,20, 62, 226, 17,"колесо мыши сдвинулось вниз 0 раз")
    TextGadget(#Label3,10, 80, 360, 115,"")
    StringGadget(#Input , 250, 50, 100, 21, "")
         SetWindowCallback(@MyWindowCallback())
         Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf