Что нового

Работа колеса мыши, когда курсор над окном

AlexxxMksv

Новичок
Сообщения
39
Репутация
0
Помогите дописать, нужно что бы колесо мыши работало только когда курсор над клиентской частью окна

Код:
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include "MouseOnEvent.au3"

Local $GUI = GUICreate("",1000,500, -1, -1)

_MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, "_MouseWheel_Events")
_MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT, "_MouseWheel_Events")
GUISetState()


While 1
	$Element = GUIGetMsg()
	Switch $Element
        Case $GUI_EVENT_CLOSE
            Exit
	EndSwitch
WEnd

Func _MouseWheel_Events($iEvent)
		Switch $iEvent
			Case $MOUSE_WHEELSCROLLDOWN_EVENT
				ConsoleWrite("1111" & @CRLF)
			Case $MOUSE_WHEELSCROLLUP_EVENT
				ConsoleWrite("2222" & @CRLF)
		EndSwitch
		Return 1
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
AlexxxMksv,
Можно через GUIGetCursorInfo().
 
Автор
A

AlexxxMksv

Новичок
Сообщения
39
Репутация
0
madmasles сказал(а):
AlexxxMksv,
Можно через GUIGetCursorInfo().

Это что используя
$array[4] = Идентификатор элемента, на который наведён курсор мыши (или 0, если не наведено) ?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
AlexxxMksv
только когда курсор над клиентской частью окна
Код:
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include "MouseOnEvent.au3"
#include <WinAPI.au3>

Global $iWidth = 1000, $iHeight = 500
Global $GUI = GUICreate("", $iWidth, $iHeight, -1, -1)

_MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, "_MouseWheel_Events")
_MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT, "_MouseWheel_Events")
GUISetState()


While 1
    $Element = GUIGetMsg()
    Switch $Element
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func _MouseWheel_Events($iEvent)
        Switch $iEvent
            Case $MOUSE_WHEELSCROLLDOWN_EVENT
                If CheckPoint() Then ConsoleWrite("1111" & @CRLF)
            Case $MOUSE_WHEELSCROLLUP_EVENT
                If CheckPoint() Then ConsoleWrite("2222" & @CRLF)
        EndSwitch
        Return 1
EndFunc

Func CheckPoint()
    If Not WinActive($GUI) Then Return False
    Local $tPoint = _WinAPI_GetMousePos(True, $GUI)
    If @error Then Return False
    Return $tPoint.X >= 0 And $tPoint.X <= $iWidth And $tPoint.Y >= 0 And $tPoint.Y <= $iHeight
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
AlexxxMksv [?]
Это что используя...
Код:
#include <GUIConstantsEx.au3>
#include 'MouseOnEvent.au3'

Global $iWidth = 1000, $iHeight = 500
Global $hGUI = GUICreate('Test', $iWidth, $iHeight)

_MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, '_MouseWheel_Events')
_MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT, '_MouseWheel_Events')
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _MouseWheel_Events($iEvent)
;~ 	If Not WinActive($hGUI) Then Return
	Local $a_Info = GUIGetCursorInfo($hGUI)
	If @error Then Return
	Switch $a_Info[0]
		Case 0 To $iWidth
			Switch $a_Info[1]
				Case 0 To $iHeight
					Switch $iEvent
						Case $MOUSE_WHEELSCROLLDOWN_EVENT
							ConsoleWrite('DOWN' & @CRLF)
						Case $MOUSE_WHEELSCROLLUP_EVENT
							ConsoleWrite('UP' & @CRLF)
					EndSwitch
			EndSwitch
	EndSwitch
EndFunc   ;==>_MouseWheel_Events
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
AlexxxMksv,
Еще так можно, но будет работать на всем окне, а не только на клиентской частью.
Код:
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include 'MouseOnEvent.au3'
#include <WinAPI.au3>

Global $iWidth = 1000, $iHeight = 500
Global $hGUI = GUICreate('Test', $iWidth, $iHeight)

_MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, '_MouseWheel_Events')
_MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT, '_MouseWheel_Events')
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _MouseWheel_Events($iEvent)
;~ 	If Not WinActive($hGUI) Then Return
	If Not _Check_Wnd_Point($hGUI) Then Return
	Switch $iEvent
		Case $MOUSE_WHEELSCROLLDOWN_EVENT
			ConsoleWrite('DOWN' & @CRLF)
		Case $MOUSE_WHEELSCROLLUP_EVENT
			ConsoleWrite('UP' & @CRLF)
	EndSwitch
EndFunc   ;==>_MouseWheel_Events

Func _Check_Wnd_Point($h_Gui)
	Local Static $t__Point = DllStructCreate($tagPoint)

	If Not _WinAPI_GetCursorPos($t__Point) Then Return False
	Local $h_Wnd = _WinAPI_WindowFromPoint($t__Point)
	If Not $h_Wnd Then Return False
	Return $h_Gui = _WinAPI_GetAncestor($h_Wnd, $GA_ROOT)
EndFunc   ;==>_Check_Wnd_Point

Func _WinAPI_GetCursorPos(ByRef $t_Point)
	Local $a_Res = DllCall('user32.dll', 'int', 'GetCursorPos', 'struct*', $t_Point)
	If (@error) Or (Not $a_Res[0]) Then Return 0
	Return 1
EndFunc   ;==>_WinAPI_GetCursorPos


Добавлено:
Сообщение автоматически объединено:

AlexxxMksv,
[info border=#0000ff float=left]На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
package_old.gif
Тема не решена
[/info]
 
Верх