Modify

Opened 31 hours ago

#4063 new Bug

ControlGetPos does not return info about a nested Child window

Reported by: Jpm Owned by:
Milestone: Component: AutoIt
Version: 3.3.14.0 Severity: None
Keywords: Cc:

Description

here a repro example

#include <GUIConstantsEx.au3>
#include <WinAPISysWin.au3>
#include <WindowsStylesConstants.au3>

Local $hGUI = GUICreate("ControlGetPos() ", 400, 350)
Local $idInfo = GUICtrlCreateLabel("test", 10, 200, 380, 150)

Local $hChild_1 = GUICreate("Child_1", 280, 180, 70, 10, BitOR($WS_CHILD, $WS_VISIBLE), -1, $hGUI) ; 10 pixels inside GUI
GUISetBkColor(0xFFFF00) ; yellow

Local $hChild_2 = GUICreate("Child_2", 240, 140, 20, 20, BitOR($WS_CHILD, $WS_VISIBLE), -1, $hChild_1) ; + 20 pixels inside $hChild_1
GUISetBkColor(0xC0FFFF) ; light blue
Local $idBtn = GUICtrlCreateButton("Button", 40, 40, 80, 30) ; + 40 pixels inside $hChild_2 (that's 10+20+40 = 70 pixels inside GUI)

Local $aPos1 = ControlGetPos($hChild_1, "", $idBtn); relative coord in Child1
Local $aPos = ControlGetPos($hGUI, "", $idBtn) ; to be used  for instance in MouseMove() relative to GUI client area
Local $aPos2 = ControlGetPos($hChild_2, "", $idBtn); relative coord in Child2

Local $hBtn = GUICtrlGetHandle($idBtn)
Local $hAncestor = _WinAPI_GetAncestor($hBtn, $GA_ROOT) ; = $hGUI
Local $hParent = _WinAPI_GetAncestor($hBtn, $GA_PARENT) ; = $hChild_2

GUISetState(@SW_SHOW, $hGUI)

Local $sText =  "$hGUI = " & $hGUI & "   $hChild_1 = " & $hChild_1 & "   $hChild_2 = " & $hChild_2 & @CRLF & _
		"Ancestor $GA_ROOT = " & $hAncestor & " Ancestor $GA_PARENT = " & $hParent & @CRLF & @CRLF & _
		"Button ControlGetPos Child2 : X = " & $aPos2[0] & " / Y = " & $aPos2[1] & @CRLF & _
		"Button ControlGetPos Child1 : X = " & $aPos1[0] & " / Y = " & $aPos1[1] & @CRLF & _
		"Button ControlGetPos GUI    : X = " & $aPos[0] & " / Y = " & $aPos[1] & @CRLF
GUICtrlSetData($idInfo, $sText)

Local $aCtrl[3] = ["Child2", "Child1", "GUI   "]
Local $iCtrl = 0

; Click on the button from specific control or window
ControlClick($hChild_2, "", $idBtn, "left", 1)
ControlClick($hChild_1, "", $idBtn, "left", 1)
ControlClick($hGUI, "", $idBtn, "left", 1)

Opt("MouseCoordMode", 2) ; relative to GUI client area
MouseMove($aPOS[0], $aPOS[1]) ; move to the upper left of the button

While 1
	Switch (GUIGetMsg())
		Case $idBtn
			If $iCtrl < UBound($aCtrl) Then
				$sText &= @CRLF & ">>>>>>>>>> BTN clicked in " & $aCtrl[$iCtrl] & " <<<<<<<<<<<<<<"
				GUICtrlSetData($idInfo, $sText)
			Else
				Tooltip('BTN Clicked')
				Sleep(2000)
				Tooltip('')
			EndIf
			$iCtrl += 1

		Case $GUI_EVENT_CLOSE
			ExitLoop

	EndSwitch

	Sleep(10)
WEnd

Attachments (0)

Change History (0)

Guidelines for posting comments:

  • You cannot re-open a ticket but you may still leave a comment if you have additional information to add.
  • In-depth discussions should take place on the forum.

For more information see the full version of the ticket guidelines here.

Add Comment

Modify Ticket

Action
as new The ticket will remain with no owner.
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.