Что нового

MouseGetPos относительно GUI (координаты в GUI)

nu3dell

Осваивающий
Сообщения
139
Репутация
24
Как получать координаты x и y в GUI, то есть, вверх от начала gui = 0.0, низ заканчивался 10.4, то есть положения будут менять от 0.0 до 10.4 (центр что бы показывал 5.2)
Слева от начала gui = -0.0, справа от конца gui = 5.8 то есть положения будут менять от -0.0 до 5.8 (центр что бы показывал 3.9)

Код:
#include <GUIConstantsEx.au3>
#Include <Misc.au3>
$dll = DllOpen("user32.dll")

Local $aArreaCoord[2]
$aArreaCoord[0] = 0




GUICreate("",400,200)
GUISetState() 
GUISetCursor(3)
    While 1
        $msg = GUIGetMsg()
		Select
        Case  $msg = $GUI_EVENT_CLOSE 			
		ExitLoop
	EndSelect
	$i = 0
	While $i < 1
	Sleep(50)
    While _IsPressed("01", $dll)
        If $aArreaCoord[$i] = 0 Then
            $MousePos = MouseGetPos()
            $aArreaCoord[$i] = $MousePos[0] & " " & $MousePos[1]
        EndIf
    WEnd
    If $aArreaCoord[$i] <> 0 Then $i += 1
WEnd
DllClose($dll)
MsgBox(0,"Координат", "Координаты клика " &'X= '& $MousePos[0] &' Y= '& $MousePos[1])
Exit
WEnd
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
См.
Код:
Opt("MouseCoordMode", 0) ;или 2 - относительно клиентской части активного окна.



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

Кстати в данном случае я думаю пример можно упростить:

Код:
#include <GUIConstantsEx.au3>

Opt("MouseCoordMode", 0)

GUICreate("", 400, 200)
GUISetCursor(3)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $GUI_EVENT_PRIMARYUP
			MsgBox(0, "Координат", "Координаты клика " & 'X= ' & MouseGetPos(0) & ' Y= ' & MouseGetPos(1))
			Exit
	EndSwitch
WEnd
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
Чуть переделал. Теперь в верхнем левом углу клик выдаёт координаты 0.0
Если я правильно угадал необходимое...
Аналог - GUIGetCursorInfo

Код:
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>

$hwnd = GUICreate("", 400, 200)
GUISetCursor(3)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $GUI_EVENT_PRIMARYUP
			$ClientGUIpos=_Main($hwnd)
            MsgBox(0, "Координат", "Координаты клика " & 'X= ' & MouseGetPos(0)-$ClientGUIpos[0] & ' Y= ' & MouseGetPos(1)-$ClientGUIpos[1])
            ; Exit
    EndSwitch
WEnd

Func _Main($hwnd)
    Local $tpoint = DllStructCreate("int X;int Y")
    DllStructSetData($tpoint, "X", 0)
    DllStructSetData($tpoint, "Y", 0)
    _WinAPI_ClientToScreen($hwnd, $tpoint)
	If @error Then Return SetError(1)
	Local $out[2]
	$out[0]=DllStructGetData($tpoint, "X")
	$out[1]=DllStructGetData($tpoint, "Y")
	Return $out
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
AZJIO [?]
Чуть переделал. Теперь в верхнем левом углу клик выдаёт координаты 0.0
А смысл?
И кстати вместо этого (я про _Main) можно использовать WinGetPos + WinGetClientSize:
Код:
Func _Main($hwnd)
	Local $out[2]
	
    Local $aPos = WinGetPos($hwnd)
    Local $aClientSize = WinGetClientSize($hwnd)
	
	$out[0] = $aPos[0] + (($aPos[2] - $aClientSize[0]) / 2)
    $out[1] = $aPos[1] + ($aPos[3] - $aClientSize[1] - (($aPos[2] - $aClientSize[0]) / 2))
	
    Return $out
EndFunc


Аналог - GUIGetCursorInfo
А почему бы не использовать его и вправду?

Код:
#include <GUIConstantsEx.au3>

GUICreate("", 400, 200)
GUISetCursor(3)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $GUI_EVENT_PRIMARYUP
			$aCurInfo = GUIGetCursorInfo()
			MsgBox(0, "Координат", "Координаты клика " & 'X= ' & $aCurInfo[0] & ' Y= ' & $aCurInfo[1])
	EndSwitch
WEnd
 
Автор
nu3dell

nu3dell

Осваивающий
Сообщения
139
Репутация
24
Как седлать что бы картинка двигалась за курсором?

Код:
#include <GUIConstantsEx.au3>
#Include <Icons.au3>
Opt("MouseCoordMode", 0)
$Png = @ScriptDir & "\**.png"
GUICreate("", 400, 200)
GUISetCursor(3)
GUISetState()
$aCur = MouseGetPos()
$label = GUICtrlCreateLabel('X= 0.' & $aCur[0] & ' Y= 0.' & $aCur[1],10,10,200,20)
$Pic = GUICtrlCreatePic('', $aCur[0], $aCur[1], 100, 51,$GUI_DISABLE)
_SetImage($Pic, $Png)
While 1
	$aCur = MouseGetPos()
	GUICtrlSetData($label,'X= 0.' & $aCur[0] & ' Y= 0.' & $aCur[1])
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $GUI_EVENT_PRIMARYUP
            $aCurInfo = GUIGetCursorInfo()
			MsgBox(0, "Координат", "Координаты клика " & 'X= 0.' & $aCurInfo[0] & ' Y= 0.' & $aCurInfo[1])
		EndSwitch
WEnd
 
Автор
nu3dell

nu3dell

Осваивающий
Сообщения
139
Репутация
24
CreatoR В GUI данного скрипта вместо, "GUISetCursor(3)", была картинка
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
nu3dell [?]
В GUI данного скрипта вместо, "GUISetCursor(3)", была картинка
И что?

Тема про то как использовать относительные координаты, остальное уже не по теме, поэтому прошу в новую тему.
 
Верх