Функция WM_MOUSEMOVE

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


WM_MOUSEMOVE

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

Параметры

Указанные параметры передаются системой.
$wParam Содержит комбинацию одновременно нажатых клавиш:
    MK_CONTROL = 0x8
    MK_LBUTTON = 0x1
    MK_MBUTTON = 0x10
    MK_RBUTTON = 0x2
    MK_SHIFT = 0x4
    MK_XBUTTON1 = 0x20
    MK_XBUTTON2 = 0x40
$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 $k = 0
$Gui = GUICreate("WM_MOUSEMOVE", 500, 250)
GUICtrlCreateLabel('Функция WM_MOUSEMOVE выполняется при перемещении мыши в клиентской области окна.', 5, 5, 380, 34)
$Label = GUICtrlCreateLabel('', 10, 45, 230, 110)
GUISetState()

GUIRegisterMsg(0x0200, "WM_MOUSEMOVE")

Do
Until GUIGetMsg() = -3

Func WM_MOUSEMOVE($hWnd, $iMsg, $wParam, $lParam)
    Local $key, $X, $Y
    $X = BitAND($lParam, 0xFFFF) ; _WinAPI_LoWord
    $Y = BitShift($lParam, 16) ; _WinAPI_HiWord

    ; Одновременно нажатые клавиши
    $key = _KeysHeld(BitAND($wParam, 0xFFFF)) ; _WinAPI_LoWord
    If $key Then
        $key = @LF & 'Одновременно удерживаемые клавиши:' & @LF & $key
    Else
        $key = ''
    EndIf
    GUICtrlSetData($Label, $key)

    $k += 1
    WinSetTitle($Gui, '', 'Вызов ' & $k & ' раз, x=' & $X & ', y=' & $Y)
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