- Сообщения
- 7,790
- Репутация
- 2,322
Обнаружил, что в версиях AutoIt 3.3.10.2 и 3.3.12.0, при установки курсора для элемента при помощи функции GUICtrlSetCursor(), блокируется обработка сообщения WM_SETCURSOR, wParam не возвращает Handle элемента на котором находится курсор. В версиях (не бета - на бетах не проверял) ниже все отрабатывает на ура. Проверял на Windows 7x32. Пример:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
Global $hGui, $iLbl, $hLbl, $iBtn, $hBtn, $iCountBtn, $iCountLbl, $iCursor = 0
$hGui = GUICreate('Test ' & @AutoItVersion, 200, 150)
$iLbl = GUICtrlCreateLabel('', 20, 40, 160, 20, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER, $SS_CENTERIMAGE))
GUICtrlSetBkColor($iLbl, 0xFFFFFF)
$hLbl = GUICtrlGetHandle($iLbl)
GUICtrlSetData($iLbl, 'Test GUICtrlSetCursor')
$iBtn = GUICtrlCreateButton('SetCursor', 20, 80, 160, 40)
$hBtn = GUICtrlGetHandle($iBtn)
GUISetState()
GUIRegisterMsg($WM_SETCURSOR, '_WM_SETCURSOR')
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $iBtn
GUICtrlSetData($iBtn, 'SetCursor, Now = ' & $iCursor)
GUICtrlSetCursor($iLbl, $iCursor)
GUICtrlSetCursor($iBtn, $iCursor)
$iCursor += 1
If $iCursor = 16 Then $iCursor = 0
EndSwitch
WEnd
Func _WM_SETCURSOR($h_Wnd, $i_Msg, $i_wParam, $i_lParam)
Switch $h_Wnd
Case $hGui
Switch $i_wParam
Case $hLbl
$iCountLbl += 1
ConsoleWrite($iCountLbl & ' Cursor on Label' & @LF)
Case $hBtn
$iCountBtn += 1
ConsoleWrite($iCountBtn & ' Cursor on Button' & @LF)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>_WM_SETCURSOR