Gui in Gui möglich mit Autoit?

  • Hi

    Wollte mal fragen ob das hier möglich ist...
    ( So das man das hintere Fenster und das innere Fenster maximieren kann )

    [Blockierte Grafik: http://img176.imageshack.us/img176/4207/image1jt4.png
    ( Arbeitsplatz rechte Maustaste > Verwalten )

    MFG chris :!:

  • Hi,

    hier vielleicht ein erster Hinweis. :)

    Spoiler anzeigen
    [autoit]


    ;====================================================
    ;============= Example of a child window ============
    ;====================================================
    ; AutoIt version: 3.0.103
    ; Language: English
    ; Author: "SlimShady"
    ;
    ; ----------------------------------------------------------------------------
    ; Script Start
    ; ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ;Include constants
    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit]

    _Main()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Main()

    [/autoit] [autoit][/autoit] [autoit]

    ;Initialize variables
    Local $GUIWidth = 250, $GUIHeight = 250
    Local $ParentWin, $ParentWin_Pos, $ChildWin, $msg

    [/autoit] [autoit][/autoit] [autoit]

    ;Create main/parent window
    $ParentWin = GUICreate("Parent GUI", $GUIWidth, $GUIHeight)
    ;Save the position of the parent window
    $ParentWin_Pos = WinGetPos($ParentWin, "")
    ;Show the parent window/Make the parent window visible
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    ;Create child window and add the parameter to make it the child of the parent window
    $ChildWin = GUICreate("Child GUI", $GUIWidth, $GUIHeight, $ParentWin_Pos[0] + 100, $ParentWin_Pos[1] + 100, -1, -1, $ParentWin)
    ;Show the child window/Make the child window visible
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    ;Switch to the parent window
    GUISwitch($ParentWin)

    [/autoit] [autoit][/autoit] [autoit]

    ;Loop until:
    ;- user presses Esc when focused to the parent window
    ;- user presses Alt+F4 when focused to the parent window
    ;- user clicks the close button of the parent window
    While 1
    ;After every loop check if the user clicked something in the GUI windows
    $msg = GUIGetMsg(1)
    Select
    ;Check if user clicked on a close button of any of the 2 windows
    Case $msg[0] = $GUI_EVENT_CLOSE
    ;Check if user clicked on the close button of the child window
    If $msg[1] = $ChildWin Then
    MsgBox(64, "Test", "Child GUI will now close.")
    ;Switch to the child window
    GUISwitch($ChildWin)
    ;Destroy the child GUI including the controls
    GUIDelete()
    ;Check if user clicked on the close button of the parent window
    ElseIf $msg[1] = $ParentWin Then
    MsgBox(64, "Test", "Parent GUI will now close.")
    ;Switch to the parent window
    GUISwitch($ParentWin)
    ;Destroy the parent GUI including the controls
    GUIDelete()
    ;Exit the script
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect

    [/autoit] [autoit][/autoit] [autoit]

    WEnd
    EndFunc ;==>_Main

    [/autoit]


    Schönes WE und weiterhin
    viel Erfolg !

  • mhhhhhh da gibts möglichkeiten das zu machn ich würde es vll so machen

    Get Main GUI position and SIZE
    => daraus berechnest du wie groß das fenster werden soll das in dem fenster immer ist (in die while schleifen koordinanten vom fenster packen)

    • Offizieller Beitrag

    Hallo

    Hier, ich hab dir mal schnell was geschrieben, ich hoffe es hilft

    Spoiler anzeigen
    [autoit]

    #include<WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("Test", 500, 500, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_CLIPCHILDREN))
    $hGUI2 = GUICreate("Test2", 300, 300, 10, 10)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $nExStyle = DllCall("user32.dll", "int", "GetWindowLong", "hwnd", $hGUI2, "int", 0xEC)
    DllCall("user32.dll", "int", "SetWindowLong", "hwnd", $hGUI2, "int", 0xEC, "int", BitOR($nExStyle[0], $WS_EX_MDICHILD))
    DllCall("user32.dll", "int", "SetParent", "hwnd", $hGUI2, "hwnd", $hGUI)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW, $hGUI)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    If $msg = -3 Then ExitLoop
    WEnd

    [/autoit]

    Mfg Spider

  • Lies Dir einfach mal GUICreate () durch. Da gibt es einen Extended Style $WS_EX_MDICHILD der hilft soetwas zu simulieren. ABER: ein echtes MDI ist das auch nicht.

    Gruß,

    TrueMu

    Edit: Spider war nicht nur schneller, sondern auch besser. :thumbup:

  • Hi chris,

    falsch Verstanden oder falsche Frage (Gui in Gui). Vieleicht so, Oscar hat diese Fenstertechnik für ein Fenster benutzt.

    Spoiler anzeigen
    [autoit]


    #Include <GUIConstants.au3>
    #Include <File.au3>
    #Include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate('Recursive FileList v1.0 (Oscar for AutoIt.de)', @DesktopWidth-5, @DesktopHeight-95, 0, 0)
    GUISetBKColor(0x888888) ; Hintergrundfarbe des Fensters
    GUISetIcon(@SystemDir & '\shell32.dll', -20)
    $button = GUICtrlCreateButton('Ordner auswählen', 10, 8, 120, 26)
    GUICtrlSetFont(-1, 10, 400, 0, 'Arial')
    $label = GUICtrlCreateLabel('', 150, 12, @DesktopWidth-160, 20)
    GUICtrlSetFont(-1, 12, 400, 0, 'Times New Roman')
    GUICtrlSetColor(-1, 0xffffff)
    GUICtrlCreateLabel('Datei Nr. Größe (Bytes) Dateiname inkl. Pfad', 10, 45, @DesktopWidth-65, 20)
    GUICtrlSetFont(-1, 10, 400, 0, 'Courier New')
    GUICtrlSetColor(-1, 0xffffff)
    $edit1 = GUICtrlCreateEdit('', 10, 65, @DesktopWidth-25, @DesktopHeight-170)
    GUICtrlSetFont(-1, 10, 400, 0, 'Courier New')

    [/autoit] [autoit][/autoit] [autoit]

    Global $Files, $count, $Byte, $msg, $bBytes, $res, $unit, $start, $diff, $aFileList, $aBytes, $fpath

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button
    $Files = ''
    $Bytes = ''
    $msg = ''
    Start()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func Start()
    $fpath = FileSelectFolder('Bitte einen Ordner auswählen!', '')
    If Not @error Then
    $start = TimerInit()
    If StringRight($fpath, 1) <> '\' Then $fpath &= '\'
    GUICtrlSetData($label, $fpath)
    $count = 0
    _FileListToString($fpath)
    GUICtrlSetData($label, 'Bereite Ausgabe vor. Bitte warten...')
    $aFileList = StringSplit($Files, '|'); Array $aFileList enthält Auflistung aller Dateien inkl. Pfad
    $aBytes = StringSplit($Bytes, '|'); Array $aBytes enthält die Byteanzahl jeder Datei
    $bBytes = 0
    $kmgBytes = 0
    $unit = ' B)'
    For $i = 1 To $aFileList[0]-1
    $msg &= StringRight(' ' & xStringAddComma($i, '.', ','), 8) & StringRight(' ' & xStringAddComma($aBytes[$i], '.', ','), 18) & ' ' & $aFileList[$i] & @CRLF
    $bBytes += $aBytes[$i]
    Next
    If ($bBytes / 2^30) > 1 Then
    $kmgBytes = Round($bBytes / 2^30, 2)
    $unit = ' GB)'
    ElseIf ($bBytes / 2^20) > 1 Then
    $kmgBytes = Round($bBytes / 2^20, 2)
    $unit = ' MB)'
    ElseIf ($bBytes / 2^10) > 1 Then
    $kmgBytes = Round($bBytes / 2^10, 2)
    $unit = ' KB)'
    EndIf
    $res = ' ' & xStringAddComma($bBytes, '.', ',') & ' Bytes (' & xStringAddComma($kmgBytes, '.', ',') & $unit
    $diff = TimerDiff($start)
    GUICtrlSetData($label, Round($diff / 1000, 3) & ' sek. Pfad = "' & $fpath & '" ' & xStringAddComma($count, '.', ',') & ' Dateien ' & $res)
    GUICtrlSetData($edit1, $msg)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _FileListToString($path)
    Local $hSearch, $sFile
    $hSearch = FileFindFirstFile($path & '*.*')
    If $hSearch <> -1 Then
    While 1
    $sFile = FileFindNextFile($hSearch)
    If @error Then
    SetError(0)
    ExitLoop
    EndIf
    If StringInStr(FileGetAttrib($path & $sFile), "D") <> 0 Then ContinueLoop
    $count += 1
    $Bytes &= FileGetSize($path & $sFile) & '|'
    $Files &= $path & $sFile & '|'
    WEnd
    FileClose($hSearch)
    EndIf
    _ReFileListToString($path)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ReFileListToString($path)
    GUICtrlSetData($label, $path)
    Local $dFileList = _FileListToArray($path, '*', 2)
    If IsArray($dFileList) Then
    For $i = 1 To $dFileList[0]
    Local $hSearch, $sFile
    $hSearch = FileFindFirstFile($path & $dFileList[$i] & "\" & '*.*')
    If $hSearch <> -1 Then
    While 1
    $sFile = FileFindNextFile($hSearch)
    If @error Then
    SetError(0)
    ExitLoop
    EndIf
    If StringInStr(FileGetAttrib($path & $dFileList[$i] & "\" & $sFile), "D") <> 0 Then ContinueLoop
    $count += 1
    $Bytes &= FileGetSize($path & $dFileList[$i] & "\" & $sFile) & '|'
    $Files &= $path & $dFileList[$i] & "\" & $sFile & '|'
    WEnd
    FileClose($hSearch)
    EndIf
    _ReFileListToString($path & $dFileList[$i] & '\')
    Next
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func xStringAddComma($sStr, $sSeparator = ',', $sEnd = '.')
    Local $aNum = StringSplit($sStr, '.,'), $l = StringLen($aNum[1]), $r = ''
    If $aNum[0] > 2 Then Return SetError(1, 0, $sStr)
    Switch $l
    Case 0 To 3
    Return StringRegExpReplace($sStr, '[.,]', $sEnd)
    Case Else
    For $i = 1 To Int($l / 3)
    $r = $sSeparator & StringRight($aNum[1], 3) & $r
    $aNum[1] = StringTrimRight($aNum[1], 3)
    Next
    $r = StringTrimLeft($aNum[1] & $r, $aNum[1] = '')
    If $aNum[0] > 1 Then $r &= $sEnd & $aNum[2]
    Return $r
    EndSwitch
    EndFunc

    [/autoit]


    Schönes WE und weiterhin
    viel Erfolg !

  • THX das ist genau das was ich gesucht habe^^ :D

    MFG chris :!:

  • Hi Leute :D
    Also das is ja voll cool mit den Fenster in Fenster :D
    Aber wo her wisst ihr die Fuktionen aus den Dll Datein und das was sie verursachen ?

    _____________
    MfG [KdD]Wolf :rock: :rock:

    • Offizieller Beitrag

    Hallo

    @Wolf: Google oder halt DllDepends..
    Carsten8:
    Probier das mal aus, sollte jetzt Maximiert werden können die GUI und die ChildGUI sollte sich unabhängig von der MainGUI schließen können.

    Spoiler anzeigen
    [autoit]

    #include<WindowsConstants.au3>
    Opt("GUIOnEventMode",1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("Test", 500, 500, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_CLIPCHILDREN))
    GUISetOnEvent(-3,"_exit")
    $hChildGUI = GUICreate("Test2", 300, 300, 10, 10, $WS_MAXIMIZEBOX)
    GUISetOnEvent(-3,"_closeChild")

    [/autoit] [autoit][/autoit] [autoit]

    $nExStyle = DllCall("user32.dll", "int", "GetWindowLong", "hwnd", $hChildGUI, "int", 0xEC)
    DllCall("user32.dll", "int", "SetWindowLong", "hwnd", $hChildGUI, "int", 0xEC, "int", BitOR($nExStyle[0], $WS_EX_MDICHILD))
    DllCall("user32.dll", "int", "SetParent", "hwnd", $hChildGUI, "hwnd", $hGUI)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW, $hGUI)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(100)

    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _closeChild()
    GUIDelete($hChildGUI)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    Exit
    EndFunc

    [/autoit]

    Mfg Spider