- Offizieller Beitrag
Nachdem ich bei meiner Suche nach dem auswerten des Mausrades etliche Scripte gefunden habe, die das per Callback lösen, musste ich jetzt feststellen, dass das viel einfacher geht.
Man kann einfach $WM_MOUSEWHEEL per GuiRegisterMsg registrieren und bekommt dann alle wichtigen Informationen.
Hier ist mal ein kleines Beispiel-Script:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
Global $iCount = 1000
Global $hGui = GUICreate('MouseWheel', 320, 240)
Global $idCounter = GUICtrlCreateLabel($iCount, 80, 20, 160, 40, $SS_RIGHT, $WS_EX_STATICEDGE)
GUICtrlSetFont(-1, 28, 800, 0, 'Courier New')
GUICtrlSetBkColor(-1, 0xDDDDDD)
GUISetState(@SW_SHOW, $hGui)
GUIRegisterMsg($WM_MOUSEWHEEL, '_WM_MOUSEWHEEL')
Do
Until GUIGetMsg() = -3
Exit
Func _WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam)
Local $iWheel = _WinAPI_HiWord($wParam) / 120 ; down = -1, up = 1
Local $aGuiInfo = GUIGetCursorInfo($hGui), $iStep = 5
If $aGuiInfo[4] = $idCounter Then $iCount += $iWheel * $iStep
GUICtrlSetData($idCounter, $iCount)
Return $GUI_RUNDEFMSG
EndFunc
Alles anzeigen
Das zählt den Counter rauf/runter, wenn man sich mit der Maus über dem Counterfeld befindet und das Mausrad dreht.
Edit: Noch ein Nachtrag, weil mir das gerade erst aufgefallen ist. Wenn es noch andere Control-Elemente auf der GUI gibt, die ebenfalls ein scrollen mit dem Mausrad ermöglichen (z.B. Listviews), dann reicht das obige Beispiel nicht aus. Man muss dann dafür sorgen, dass das Label den Focus bekommt. Das geht ganz gut, indem man die Mausbewegung auswertet und dann dem Control-Element unter der Maus den Focus zuweist:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <StaticConstants.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
Global $iCount = 1000
Global $hGui = GUICreate('MouseWheel', 320, 240)
Global $idCounter = GUICtrlCreateLabel($iCount, 80, 20, 160, 40, $SS_RIGHT, $WS_EX_STATICEDGE)
GUICtrlSetFont(-1, 28, 800, 0, 'Courier New')
GUICtrlSetBkColor(-1, 0xDDDDDD)
Global $idList = GUICtrlCreateListView('col1|col2|col3', 10, 70, 300, 150)
_GUICtrlListView_SetColumnWidth($idList, 0, 200)
_GUICtrlListView_SetColumnWidth($idList, 1, 200)
_GUICtrlListView_SetColumnWidth($idList, 2, 200)
GUISetState(@SW_SHOW, $hGui)
GUIRegisterMsg($WM_MOUSEWHEEL, '_WM_MOUSEWHEEL')
While True
Switch GUIGetMsg()
Case $GUI_EVENT_MOUSEMOVE
$aGuiInfo = GUIGetCursorInfo($hGui)
GUICtrlSetState($aGuiInfo[4], $GUI_FOCUS)
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam)
Local $iWheel = _WinAPI_HiWord($wParam) / 120 ; down = -1, up = 1
Local $aGuiInfo = GUIGetCursorInfo($hGui), $iStep = 5
If $aGuiInfo[4] = $idCounter Then
$iCount += $iWheel * $iStep
GUICtrlSetData($idCounter, $iCount)
EndIf
Return $GUI_RUNDEFMSG
EndFunc
Alles anzeigen