Tomb Posted February 1, 2008 Share Posted February 1, 2008 hi. is there any way to do this? if I move my main gui, my child gui's stay in the same spot and it looks silly. if i move my main gui, is there any way i can have my child gui's move along with it? Link to comment Share on other sites More sharing options...
Achilles Posted February 1, 2008 Share Posted February 1, 2008 Found this in my "Help Files" folder: #include <GuiConstants.au3> $Main_GUI = GUICreate("Main") $Btn_Exit = GUICtrlCreateButton("E&xit", 10, 10, 90, 20) GUISetState(@SW_SHOW, $Main_GUI) $Child_GUI = GUICreate("Child", 200, 100, 10, 50);, $WS_POPUP, $WS_EX_TOOLWINDOW) GUISetState(@SW_SHOW, $Child_GUI) DllCall("user32.dll", "int", "SetParent", "hwnd", WinGetHandle($Child_GUI), "hwnd", WinGetHandle($Main_GUI)) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $Btn_Exit ConsoleWrite($Child_GUI &' '&WinGetHandle('')) Exit EndSwitch WEnd My Programs[list][*]Knight Media Player[*]Multiple Desktops[*]Daily Comics[*]Journal[/list] Link to comment Share on other sites More sharing options...
Tomb Posted February 2, 2008 Author Share Posted February 2, 2008 so how is that whole thing causing child to move with main GUI ? Link to comment Share on other sites More sharing options...
Achilles Posted February 2, 2008 Share Posted February 2, 2008 DllCall("user32.dll", "int", "SetParent", "hwnd", WinGetHandle($Child_GUI), "hwnd", WinGetHandle($Main_GUI))That uses a dll to connect the movements of the two windows so that when the parent is dragged the child gets moved too. My Programs[list][*]Knight Media Player[*]Multiple Desktops[*]Daily Comics[*]Journal[/list] Link to comment Share on other sites More sharing options...
okutnik Posted February 2, 2008 Share Posted February 2, 2008 is there a way to make a child gui move without it having to be 'inside' the main gui? Something like a toolwindow that is attached to the main window but from outside of the main window? Link to comment Share on other sites More sharing options...
Achilles Posted February 2, 2008 Share Posted February 2, 2008 (edited) is there a way to make a child gui move without it having to be 'inside' the main gui? Something like a toolwindow that is attached to the main window but from outside of the main window?This is a rather sloppy way of doing it: #include <GuiConstants.au3> $Main_GUI = GUICreate("Main", 300, 100, 0, 0) $Btn_Exit = GUICtrlCreateButton("E&xit", 10, 10, 90, 20) GUISetState(@SW_SHOW, $Main_GUI) $Child_GUI = GUICreate("Child", 300, 100, 0, 126);, $WS_POPUP, $WS_EX_TOOLWINDOW) GUISetState(@SW_SHOW, $Child_GUI) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $Btn_Exit ConsoleWrite($Child_GUI &' '&WinGetHandle('')) Exit EndSwitch $pos = WinGetPos($Main_GUI) $childPos= WinGetPos($Child_GUI) If $pos[0] <> $childPos[0] or $pos[1] <> $childPos[1] + 126 then WinMove($child_GUI, '', $pos[0], $pos[1] + 126) EndIf WEnd Edit: I know there's a better way I just don't know what it is... Edited February 2, 2008 by Piano_Man My Programs[list][*]Knight Media Player[*]Multiple Desktops[*]Daily Comics[*]Journal[/list] Link to comment Share on other sites More sharing options...
Tomb Posted February 2, 2008 Author Share Posted February 2, 2008 This is a rather sloppy way of doing it: #include <GuiConstants.au3> $Main_GUI = GUICreate("Main", 300, 100, 0, 0) $Btn_Exit = GUICtrlCreateButton("E&xit", 10, 10, 90, 20) GUISetState(@SW_SHOW, $Main_GUI) $Child_GUI = GUICreate("Child", 300, 100, 0, 126);, $WS_POPUP, $WS_EX_TOOLWINDOW) GUISetState(@SW_SHOW, $Child_GUI) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $Btn_Exit ConsoleWrite($Child_GUI &' '&WinGetHandle('')) Exit EndSwitch $pos = WinGetPos($Main_GUI) $childPos= WinGetPos($Child_GUI) If $pos[0] <> $childPos[0] or $pos[1] <> $childPos[1] + 126 then WinMove($child_GUI, '', $pos[0], $pos[1] + 126) EndIf WEnd Edit: I know there's a better way I just don't know what it is...where does the 126 come from? what i have is a gui window and 4 child gui windows and if the gui moves, i want the child gui's to follow it Link to comment Share on other sites More sharing options...
Achilles Posted February 3, 2008 Share Posted February 3, 2008 where does the 126 come from? what i have is a gui window and 4 child gui windows and if the gui moves, i want the child gui's to follow itThe 126 was just the distance between the two GUI's... Here's my code a little bit changed it order to support more GUI's... #include <GuiConstants.au3> $Main_GUI = GUICreate("Main", 300, 100, 0, 0) $Btn_Exit = GUICtrlCreateButton("E&xit", 10, 10, 90, 20) GUISetState(@SW_SHOW, $Main_GUI) $gui1 = GUICreate("Child", 300, 100, 0, 126);, $WS_POPUP, $WS_EX_TOOLWINDOW) GUISetState(@SW_SHOW, $gui1) $gui2 = GUICreate("Child", 300, 100, 0, 252);, $WS_POPUP, $WS_EX_TOOLWINDOW) GUISetState(@SW_SHOW, $gui2) $gui3 = GUICreate("Child", 300, 100, 0, 378);, $WS_POPUP, $WS_EX_TOOLWINDOW) GUISetState(@SW_SHOW, $gui3) $gui4 = GUICreate("Child", 300, 100, 0, 504);, $WS_POPUP, $WS_EX_TOOLWINDOW) GUISetState(@SW_SHOW, $gui4) $oldPos = WinGetPos($Main_GUI) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $Btn_Exit ;~ ConsoleWrite($Child_GUI &' '&WinGetHandle('')) Exit EndSwitch $pos = WinGetPos($Main_GUI) If $pos[0] <> $oldPos[0] or $pos[1] <> $oldPos[1] then WinMove($gui1, '', $pos[0], $pos[1] + 126) WinMove($gui2, '', $pos[0], $pos[1] + 252) WinMove($gui3, '', $pos[0], $pos[1] + 378) WinMove($gui4, '', $pos[0], $pos[1] + 504) EndIf WEndI still think there is a more efficient way, but this still works decently... My Programs[list][*]Knight Media Player[*]Multiple Desktops[*]Daily Comics[*]Journal[/list] Link to comment Share on other sites More sharing options...
Tomb Posted February 3, 2008 Author Share Posted February 3, 2008 (edited) The 126 was just the distance between the two GUI's... Here's my code a little bit changed it order to support more GUI's... #include <GuiConstants.au3> $Main_GUI = GUICreate("Main", 300, 100, 0, 0) $Btn_Exit = GUICtrlCreateButton("E&xit", 10, 10, 90, 20) GUISetState(@SW_SHOW, $Main_GUI) $gui1 = GUICreate("Child", 300, 100, 0, 126);, $WS_POPUP, $WS_EX_TOOLWINDOW) GUISetState(@SW_SHOW, $gui1) $gui2 = GUICreate("Child", 300, 100, 0, 252);, $WS_POPUP, $WS_EX_TOOLWINDOW) GUISetState(@SW_SHOW, $gui2) $gui3 = GUICreate("Child", 300, 100, 0, 378);, $WS_POPUP, $WS_EX_TOOLWINDOW) GUISetState(@SW_SHOW, $gui3) $gui4 = GUICreate("Child", 300, 100, 0, 504);, $WS_POPUP, $WS_EX_TOOLWINDOW) GUISetState(@SW_SHOW, $gui4) $oldPos = WinGetPos($Main_GUI) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $Btn_Exit ;~ ConsoleWrite($Child_GUI &' '&WinGetHandle('')) Exit EndSwitch $pos = WinGetPos($Main_GUI) If $pos[0] <> $oldPos[0] or $pos[1] <> $oldPos[1] then WinMove($gui1, '', $pos[0], $pos[1] + 126) WinMove($gui2, '', $pos[0], $pos[1] + 252) WinMove($gui3, '', $pos[0], $pos[1] + 378) WinMove($gui4, '', $pos[0], $pos[1] + 504) EndIf WEndI still think there is a more efficient way, but this still works decently...that looks pretty good although, how can i relate this to 5 gui windows, 4 on top of the other. 4 are child guis, and their location is in the center of the main GUI. i will try and edit your code for this purpose, but it is a little tricky Edited February 3, 2008 by Tomb616 Link to comment Share on other sites More sharing options...
Siao Posted February 3, 2008 Share Posted February 3, 2008 #include <GuiConstantsEx.au3> Global Const $WM_MOVING = 0x0216 $hGui1 = GUICreate("Main", 200, 200) $hGui2 = GUICreate("Child", 200, 200, -1, -1, -1, -1, $hGui1) Global $aMainPos = WinGetPos($hGui1) WinMove($hGui2, '', $aMainPos[0]+$aMainPos[2], $aMainPos[1]) GUIRegisterMsg($WM_MOVING, 'On_WM_MOVING') GUISetState(@SW_SHOW, $hGui1) GUISetState(@SW_SHOW, $hGui2) While 1 Switch GUIGetMsg() Case -3 Exit EndSwitch WEnd Func On_WM_MOVING($hWnd, $Msg, $wParam, $lParam) ;;wParam - unused, lParam - pointer to a RECT structure If $hWnd = $hGui1 Then Local $tRect = DllStructCreate('int;int;int;int', $lParam), $iXcurr = DllStructGetData($tRect, 1), $iYcurr = DllStructGetData($tRect, 2), $aChildPos = WinGetPos($hGui2) WinMove($hGui2, "", $aChildPos[0]+$iXcurr-$aMainPos[0], $aChildPos[1]+$iYcurr-$aMainPos[1]) $aMainPos[0] = $iXcurr $aMainPos[1] = $iYcurr EndIf Return $GUI_RUNDEFMSG EndFunc "be smart, drink your wine" Link to comment Share on other sites More sharing options...
Tomb Posted February 3, 2008 Author Share Posted February 3, 2008 (edited) #include <GuiConstantsEx.au3> Global Const $WM_MOVING = 0x0216 $hGui1 = GUICreate("Main", 200, 200) $hGui2 = GUICreate("Child", 200, 200, -1, -1, -1, -1, $hGui1) Global $aMainPos = WinGetPos($hGui1) WinMove($hGui2, '', $aMainPos[0]+$aMainPos[2], $aMainPos[1]) GUIRegisterMsg($WM_MOVING, 'On_WM_MOVING') GUISetState(@SW_SHOW, $hGui1) GUISetState(@SW_SHOW, $hGui2) While 1 Switch GUIGetMsg() Case -3 Exit EndSwitch WEnd Func On_WM_MOVING($hWnd, $Msg, $wParam, $lParam) ;;wParam - unused, lParam - pointer to a RECT structure If $hWnd = $hGui1 Then Local $tRect = DllStructCreate('int;int;int;int', $lParam), $iXcurr = DllStructGetData($tRect, 1), $iYcurr = DllStructGetData($tRect, 2), $aChildPos = WinGetPos($hGui2) WinMove($hGui2, "", $aChildPos[0]+$iXcurr-$aMainPos[0], $aChildPos[1]+$iYcurr-$aMainPos[1]) $aMainPos[0] = $iXcurr $aMainPos[1] = $iYcurr EndIf Return $GUI_RUNDEFMSG EndFunci copied all pieces from this into my code, all i had to comment out was the WinMove, that was moving my game gui way to the side, and now if i move my main GUI my child gui moves along with it. :) Thank you very much Edited July 18, 2012 by Tomb Link to comment Share on other sites More sharing options...
Achilles Posted February 3, 2008 Share Posted February 3, 2008 #include <GuiConstantsEx.au3> Global Const $WM_MOVING = 0x0216 $hGui1 = GUICreate("Main", 200, 200) $hGui2 = GUICreate("Child", 200, 200, -1, -1, -1, -1, $hGui1) Global $aMainPos = WinGetPos($hGui1) WinMove($hGui2, '', $aMainPos[0]+$aMainPos[2], $aMainPos[1]) GUIRegisterMsg($WM_MOVING, 'On_WM_MOVING') GUISetState(@SW_SHOW, $hGui1) GUISetState(@SW_SHOW, $hGui2) While 1 Switch GUIGetMsg() Case -3 Exit EndSwitch WEnd Func On_WM_MOVING($hWnd, $Msg, $wParam, $lParam) ;;wParam - unused, lParam - pointer to a RECT structure If $hWnd = $hGui1 Then Local $tRect = DllStructCreate('int;int;int;int', $lParam), $iXcurr = DllStructGetData($tRect, 1), $iYcurr = DllStructGetData($tRect, 2), $aChildPos = WinGetPos($hGui2) WinMove($hGui2, "", $aChildPos[0]+$iXcurr-$aMainPos[0], $aChildPos[1]+$iYcurr-$aMainPos[1]) $aMainPos[0] = $iXcurr $aMainPos[1] = $iYcurr EndIf Return $GUI_RUNDEFMSG EndFuncThat's what I had seen before, now I remember... using GuiRegisterMsg() My Programs[list][*]Knight Media Player[*]Multiple Desktops[*]Daily Comics[*]Journal[/list] Link to comment Share on other sites More sharing options...
Tomb Posted February 3, 2008 Author Share Posted February 3, 2008 That's what I had seen before, now I remember... using GuiRegisterMsg()also thank you Piano for your try to help me Link to comment Share on other sites More sharing options...
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