Функция _GetChildCoor

         Описание функции


_GetChildCoor

Возвращает координаты дочернего окна приближенные к родительскому, но в видимой рабочей области экрана

#Include <UserGUI.au3>
_GetChildCoor ( $hGui, $iWidth, $iHeight [, $iCenter = 1 [, $iStyle = 2 [, $iFixed = 0 [, $iMargin = 0 ]]]] )

Параметры

$hGui Дескриптор родительского окна
$iWidth Ширина дочернего окна
$iHeight Высота дочернего окна
$iCenter [необязательный] Выравнивание дочернего окна
    0 - По левому верхнему углу
    1 - (по умолчанию) По центру
$iStyle [необязательный] Стиль окна, который определяет ширину границ
    0 - Окно без границ, ширина границы 0 пиксель
    1 - Окно со стилем $WS_BORDER, обычно ширина этой границы 1 пиксель
    2 - (по умолчанию) Окно не изменяемое в размерах, обычно ширина этой границы 3 пикселя
    3 - Окно изменяемое в размерах ($WS_OVERLAPPEDWINDOW), обычно ширина этой границы 4 пикселя (WinXP), 8 пиксель (Win7)
$iFixed [необязательный] Если 1, то исправляет Y-координату окна при помещении его снизу при отсутствии стиля $WS_CAPTION или $WS_DLGFRAME
$iMargin [необязательный] Отступ от краёв

Возвращаемое значение

Успех:Возвращает массив следующего формата:
[0] - Ширина окна
[1] - Высота окна
[2] - X-координата окна
[3] - Y-координата окна

Примечания

Если дочернее окно создаётся в центре экрана, то требует перемещения мыши и внимания, поэтому предпочтительнее создавать окно в центре родительского окна. Кроме того, если окно перемещено за пределы экрана, то функция принуждает создать окно полностью видимым.

Чтобы определить значения $iStyle и $iFixed, укажите размер дочернего окна на пару пиксель меньше родительского. Если дочернее окно создаётся симметричным к родительскому, т.е. с одинаковыми отступами слева, справа, сверху, снизу, то параметры выставлены верно.

Пример

; AZJIO
; http://www.autoitscript.com/forum/topic/151528-getchildcoor-setcoor/
#include <WindowsConstants.au3>
#include <UserGUI.au3>

$hGui = GUICreate('My program', 420, 250, 50, 50)
$MsgBox = GUICtrlCreateButton("Button", 20, 20, 90, 30)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $MsgBox
            _MsgBox($hGui)
        Case -3
            Exit
    EndSwitch
WEnd

Func _MsgBox($hGui)
    Local $EditBut, $hGui1, $aRect, $msg, $StrBut
    $aRect = _GetChildCoor($hGui, 410, 240)
    GUISetState(@SW_DISABLE, $hGui)
   
    $hGui1 = GUICreate('Сообщение', $aRect[0], $aRect[1], $aRect[2], $aRect[3], BitOR($WS_CAPTION, $WS_SYSMENU, $WS_POPUP), -1, $hGui)
    GUICtrlCreateLabel('Что будем делать сейчас?', 20, 10, 180, 23)
    $EditBut = GUICtrlCreateButton('Редактор', 10, 40, 80, 25)
    $StrBut = GUICtrlCreateButton('Калькулятор', 100, 40, 80, 25)
    GUISetState(@SW_SHOW, $hGui1)
    While 1
        Switch GUIGetMsg()
            Case $EditBut
                Run('Notepad.exe')
            Case $StrBut
                ShellExecute('Calc.exe')
            Case -3
                GUISetState(@SW_ENABLE, $hGui)
                GUIDelete($hGui1)
                ExitLoop
        EndSwitch
    WEnd
EndFunc