Что нового

Закрыть Дочернее окно при действиях в Родительском

Nefakt

Новичок
Сообщения
74
Репутация
3
Всем привет.
Как можно сделать что бы закрылось дочернее окно при любом действие в родительском. Дочернее окно вынесено в другой .au3. Само окно работает открывается и делает свои функции но нужно что бы оно закрывалось при любых действиях в родительском.
Пока у меня так
Код:
Do
	Until GUIGetMsg() = $NameClosed Or GUIGetMsg() = $GUI_EVENT_SECONDARYDOWN
	GUIDelete($Clock)

Пока не будет нажата кнопка закрыть в дочернем или пока не будет нажата правая кнопка мыши. Но это все действует если происходит в дочернем окне.
И еще в
Код:
GUIGetMsg()
стоит sleep на 10 секунд как написано в справке можно ли как то уменьшить это время?
Заранее спасибо.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
взято отсюда http://autoit-script.ru/index.php?topic=17534.msg106829#msg106829
немного изменил условия
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
Global $exit = 0, $child
Global $hParent = GUICreate("Form1", 561, 148, -1, -1)
$Input1 = GUICtrlCreateInput("Input1", 48, 24, 121, 21)
$Label1 = GUICtrlCreateLabel("Label1", 216, 24, 36, 17)
$Button1 = GUICtrlCreateButton("Button1", 64, 72, 75, 25)
$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 200, 72, 97, 17)
$Radio1 = GUICtrlCreateRadio("Radio1", 320, 72, 113, 17)
GUISetState(@SW_SHOW, $hParent)

While 1
    If $exit = 1 Then
        $exit = 0
        GUIRegisterMsg($WM_SETCURSOR, "")
        GUIDelete($child)
    EndIf
    $aMsg = GUIGetMsg(1)
    Switch $aMsg[0]
        Case $GUI_EVENT_CLOSE
            Switch $aMsg[1]
                Case $hParent
                    Exit
            EndSwitch
        Case $Button1
            _ChildGUI($hParent)
    EndSwitch
WEnd


Func _ChildGUI($hParent)
    $child = GUICreate("Инфо", 500, 100, -1, -1, -1, -1, $hParent)
    $Label = GUICtrlCreateLabel("Информационное окно" & @CRLF & 'Закрывается при клике мышкой по нему', 24, 16, 300, 90)
    GUISetState(@SW_SHOW, $child)
    GUIRegisterMsg($WM_SETCURSOR, "WM_SETCURSOR")
EndFunc   ;==>_ChildGUI

Func WM_SETCURSOR($hWnd, $Msg, $wParam, $lParam)
    If _WinAPI_HiWord($lParam) = 513 And  $hWnd = $hParent Then $exit = 1
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SETCURSOR
 
Верх