Kyan Posted March 1, 2012 Posted March 1, 2012 (edited) Hi everyone 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 March 3, 2012 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
BrewManNH Posted March 1, 2012 Posted March 1, 2012 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 GudeHow 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
Kyan Posted March 3, 2012 Author Posted March 3, 2012 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
Moderators Melba23 Posted March 3, 2012 Moderators Posted March 3, 2012 DiOgO,Take a look at the Managing Multiple GUIs tutorial in the Wiki. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
Kyan Posted March 3, 2012 Author Posted March 3, 2012 DiOgO, Take a look at the Managing Multiple GUIs tutorial in the Wiki. M23 thanks, this one works great expandcollapse popup#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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now