Jump to content
Sign in to follow this  
Kyan

[Solved] Child window won't close at same time as Parent window

Recommended Posts

Kyan

Hi everyone :oops:

I have a problem with window childs, to close the child window I need to click twice in the close button of the parent window

here's the code

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $Parent, $Child
$Parent = GUICreate("Parent", 370, 190,-1,-1)
$context = GUICtrlCreateContextMenu()
$contextItem1 = GUICtrlCreateMenuItem("Child", $context)
GUISetState()
While 1
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
  Case $GUI_EVENT_CLOSE
   If $nMsg[1] = $Child Then
    GUISwitch($Child)
    GUIDelete()
   ElseIf $nMsg[1] = $Parent Then
    GUISwitch($Parent)
    GUIDelete()
    Exit
   EndIf
  Case $contextItem1
   _Child()
EndSwitch
WEnd
Func _Child()
$Child = GUICreate("Child", 321, 70, -1, -1,BitXOR($GUI_SS_DEFAULT_GUI, $WS_MINIMIZEBOX),'',$Parent)
GUISetState()
While 1
  $Msg = GUIGetMsg()
  Switch $Msg
   Case $GUI_EVENT_CLOSE
    GUISwitch($Child)
    GUIDelete()
    ExitLoop
  EndSwitch
WEnd
EndFunc

I miss some thing?

Best regards

Diogo

Edited by DiOgO

Heroes, there is no such thing

One day I'll discover what IE.au3 has of special for so many users using it.
C'mon there's InetRead and WinHTTP, way better
happy.png

Share this post


Link to post
Share on other sites
BrewManNH

I have corrected your code below, see where I commented out the parts that are unnecessary and changed the parts where you made a mistake.

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $Parent, $Child
$Parent = GUICreate("Parent", 370, 190, -1, -1)
$context = GUICtrlCreateContextMenu()
$contextItem1 = GUICtrlCreateMenuItem("Child", $context)
GUISetState()
While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
        Case $GUI_EVENT_CLOSE
            If $nMsg[1] = $Child Then
;~              GUISwitch($Child) <<<<<<<<<<<<< Not needed when coded correctly
                GUIDelete($Child) ; <<<<<<<<<<<<<<< Use the proper format and you don't need to switch windows to close
            ElseIf $nMsg[1] = $Parent Then
;~              GUISwitch($Parent) <<<<<<<<<<<<<<< This line and the next are unnecessary as you're exiting the script
;~              GUIDelete()
                Exit
            EndIf
        Case $contextItem1
            _Child()
    EndSwitch
WEnd
Func _Child()
    $Child = GUICreate("Child", 321, 70, -1, -1, BitXOR($GUI_SS_DEFAULT_GUI, $WS_MINIMIZEBOX), '', $Parent)
    GUISetState()
;~  While 1
;~      $Msg = GUIGetMsg() <<<<<<<<<<<<<<<< This is what was causing your script to malfunction, you shouldn't use 2 While Loops
;~      Switch $Msg
;~          Case $GUI_EVENT_CLOSE
;~              GUISwitch($Child)
;~              GUIDelete()
;~              ExitLoop
;~      EndSwitch
;~  WEnd
EndFunc   ;==>_Child

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post


Link to post
Share on other sites
Kyan

so the problem is caused by use 2 while loops, how can I get the events from the child window in this case?

using a if and another select case?


Heroes, there is no such thing

One day I'll discover what IE.au3 has of special for so many users using it.
C'mon there's InetRead and WinHTTP, way better
happy.png

Share this post


Link to post
Share on other sites
Melba23

DiOgO,

Take a look at the Managing Multiple GUIs tutorial in the Wiki. :oops:

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
Kyan

DiOgO,

Take a look at the Managing Multiple GUIs tutorial in the Wiki. :oops:

M23

thanks, this one works great :bye:

#include <GUIConstantsEx.au3>
Global $hGUI2 = 9999, $hButton3 = 9999 ; Predeclare the variables with dummy values to prevent firing the Case statements
gui1()
Func gui1()
    $hGUI1 = GUICreate("Gui 1", 200, 200, 100, 100)
    $hButton1 = GUICtrlCreateButton("Msgbox 1", 10, 10, 80, 30)
    $hButton2 = GUICtrlCreateButton("Show Gui 2", 10, 60, 80, 30)
    GUISetState()
    While 1
        $aMsg = GUIGetMsg(1) ; Use advanced parameter to get array
        Switch $aMsg[1] ; check which GUI sent the message
            Case $hGUI1
                Switch $aMsg[0] ; Now check for the messages for $hGUI1
                    Case $GUI_EVENT_CLOSE ; If we get the CLOSE message from this GUI - we exit <<<<<<<<<<<<<<<
                        ExitLoop
                    Case $hButton1
                        MsgBox("", "MsgBox 1", "Test from Gui 1")
                    Case $hButton2
                        GUICtrlSetState($hButton2, $GUI_DISABLE)
                        gui2()
                EndSwitch
            Case $hGUI2
                Switch $aMsg[0] ; Now check for the messages for $hGUI2
                    Case $GUI_EVENT_CLOSE ; If we get the CLOSE message from this GUI - we just delete the GUI <<<<<<<<<<<<<<<
                        GUIDelete($hGUI2)
                        GUICtrlSetState($hButton2, $GUI_ENABLE)
                    Case $hButton3
                        MsgBox("", "MsgBox", "Test from Gui 2")
                EndSwitch
        EndSwitch
    WEnd
EndFunc   ;==>gui1
Func gui2()
    $hGUI2 = GUICreate("Gui 2", 200, 200, 350, 350)
    $hButton3 = GUICtrlCreateButton("MsgBox 2", 10, 10, 80, 30)
    GUISetState()
EndFunc   ;==>gui2

Heroes, there is no such thing

One day I'll discover what IE.au3 has of special for so many users using it.
C'mon there's InetRead and WinHTTP, way better
happy.png

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×