GUI mit Style $WS_Popup vergrößern?

  • Hallo Leute,

    ich bastle gerade ein Skript mit einem GUI das
    einen Style $WS_Popup hat. Damit ist kein Rand
    um das GUI. Wie ich dieses verschieben kann, habe
    ich schon herausgefunden, aber wie kann ich es
    vergrößern und verkleinern? Es sollte keinen oder
    maximal einen 1px breiten Rand haben, an dem man
    "anfassen" kann, um die Größe zu verändern.

    Kennt dazu jemand eine Lösung?


    MfG
    qixx

  • Ich packe einfach mal meinen Code dazu:

    Code
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.2.0
    Author: qixx (http://www.autoit.de)
    Credits:

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

    #ce ----------------------------------------------------------------------------

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

    #Region ### Includes
    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    #EndRegion ### Includes

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

    #Region ### GUI
    $MainGUI = GUICreate("Pinnwand",500,375,-1,-1,$WS_POPUP, $WS_EX_TOOLWINDOW)
    GUICtrlCreatePic(@ScriptDir & "\PinnImages\main.jpg",0,0,500,375,$SS_LEFT)
    GUICtrlCreatePic(@ScriptDir & "\PinnImages\rahmen.jpg",0,0,500,25,-1,$GUI_WS_EX_PARENTDRAG)
    $Exit = GUICtrlCreateButton("Beenden",387,337,100,25)
    GUISetState(@SW_SHOW)

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

    $Zettel = GUICreate("Test",100,100,10,10,$WS_POPUP, $WS_EX_TOOLWINDOW)
    GUISetBkColor(0xdfc187)
    WinActivate($Zettel)

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

    _GUIinGUI($MainGUI,$Zettel)
    GUISetState(@SW_SHOW)
    #EndRegion ### GUI

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

    While 1
    Sleep(10)
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Exit
    Exit
    EndSwitch
    WEnd

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

    Func _GUIinGUI($Parent,$Children)
    $nExStyle = DllCall("user32.dll", "int", "GetWindowLong", "hwnd", $Children, "int", 0xEC)
    DllCall("user32.dll", "int", "SetWindowLong", "hwnd", $Children, "int", 0xEC, "int", BitOR($nExStyle[0], $WS_EX_MDICHILD))
    DllCall("user32.dll", "int", "SetParent", "hwnd", $Children, "hwnd", $Parent)
    EndFunc

    [/autoit]

    Vielleicht kann mir auch noch jemand bei
    folgendem Problem helfen:
    Das Hintergrundbild "verschlingt" alles andere.
    Also wird z.B. das Child-GUI gar nicht angezeigt.
    Was kann man da machen?


    MfG
    qixx

  • Hallo qixx,

    du musst das Bild nach dem erstellen DISABLEn

    [autoit]

    GUICtrlSetState(-1,$GUI_DISABLE)

    [/autoit]

    Ein PopUp Fenster kannst du meines Wissens nach nicht mit der Maus auf eine neue Größe ziehen.

    mfg (Auto)Bert

  • Habe jetzt mal ein bisschen rumprobiert und ws funktionieren
    manche Sachen nicht. Ich habe versucht, 2 GUI's resizen zu
    lassen, aber das funktioniert irgendwie nicht..
    Und das Hintergrundbild verschlingt trotzdem die 2 anderen
    GU's.. :/
    Was kann man tun?

    Code
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.2.0
    Author: qixx (http://www.autoit.de)
    Credits:

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

    #ce ----------------------------------------------------------------------------

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

    #Region ### Includes
    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    #EndRegion ### Includes

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

    Global Const $margin = 12;

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

    #Region ### GUI
    $MainGUI = GUICreate("Pinnwand",500,375,-1,-1,$WS_POPUP)
    GUICtrlCreatePic(@ScriptDir & "\PinnImages\main.jpg",0,0,500,375,$SS_LEFT)
    GUICtrlSetState(-1,$GUI_DISABLE)
    GUICtrlCreatePic(@ScriptDir & "\PinnImages\rahmen.jpg",0,0,500,25,-1,$GUI_WS_EX_PARENTDRAG)
    $Exit = GUICtrlCreateButton("Beenden",387,337,100,25)
    GUISetState(@SW_SHOW)

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

    $Zettel = GUICreate("Test",100,100,50,50,$WS_POPUP, $WS_EX_TOOLWINDOW)
    GUISetBkColor(0xdfc187)
    GuiCtrlCreateLabel("lol",1,1)
    WinActivate($Zettel)

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

    _GUIinGUI($MainGUI,$Zettel)
    GUISetState(@SW_SHOW)

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

    $Zettel2 = GUICreate("Test",100,100,150,150,$WS_POPUP, $WS_EX_TOOLWINDOW)
    GUISetBkColor(0xdfc187)
    GuiCtrlCreateLabel("lol",1,1)
    WinActivate($Zettel)

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

    _GUIinGUI($MainGUI,$Zettel2)
    GUISetState(@SW_SHOW)
    #EndRegion ### GUI

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

    GUIRegisterMsg($WM_LBUTTONDOWN, "WM_LBUTTONDOWN")
    GUIRegisterMsg($WM_MOUSEMOVE, "SetCursor")

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

    While 1
    Sleep(10)
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Exit
    Exit
    EndSwitch
    WEnd

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

    Func _GUIinGUI($Parent,$Children)
    $nExStyle = DllCall("user32.dll", "int", "GetWindowLong", "hwnd", $Children, "int", 0xEC)
    DllCall("user32.dll", "int", "SetWindowLong", "hwnd", $Children, "int", 0xEC, "int", BitOR($nExStyle[0], $WS_EX_MDICHILD))
    DllCall("user32.dll", "int", "SetParent", "hwnd", $Children, "hwnd", $Parent)
    EndFunc

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

    #Region ###Resizing Funktion
    Func GetMousePosType($hWnd)
    Local $cp = GUIGetCursorInfo($hWnd)
    Local $wp = WinGetPos($hWnd)
    Local $side = 0
    Local $TopBot = 0
    Local $curs
    If WinActive($Zettel) Then
    If $cp[0] < $margin Then $side = 1
    If $cp[0] > $wp[2] - $margin Then $side = 2
    If $cp[1] < $margin Then $TopBot = 3
    If $cp[1] > $wp[3] - $margin Then $TopBot = 6

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

    Return $side + $TopBot
    EndIf
    EndFunc;==>GetMousePosType

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

    Func SetCursor()
    Local $curs
    Switch GetMousePosType(WinGetHandle("[ACTIVE]"))
    Case 0
    $curs = 2
    Case 1, 2
    $curs = 13
    Case 3, 6
    $curs = 11
    Case 5, 7
    $curs = 10
    Case 4, 8
    $curs = 12
    EndSwitch

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

    GUISetCursor($curs, 1)

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

    EndFunc;==>SetCursor

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

    Func WM_LBUTTONDOWN($hWnd, $iMsg, $StartWIndowPosaram, $lParam)

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

    Local $drag = GetMousePosType($hWnd)
    If $drag > 0 Then
    DllCall("user32.dll", "long", "SendMessage", "hwnd", $hWnd, "int", $WM_SYSCOMMAND, "int", 0xF000 + $drag, "int", 0)
    EndIf

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

    ;F001 = LHS, F002 = RHS, F003 = top, F004 = TopLeft, F005 = TopRight, F006 = Bottom, F007 = BL, F008 = BR
    ;F009 = move gui, same as F011 F012 to F01F
    ;F010, moves cursor to centre top of gui - no idea what that is useful for.
    ;F020 minimizes
    ;F030 maximizes

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

    EndFunc;==>WM_LBUTTONDOWN
    #EndRegion ###Resizing Funktion

    [/autoit]


    MfG
    qixx

  • Hatte noch keine Zeit das zu testen, aber bei $WS_MIDCHILD
    kann man das innere GUI dann aus dem HauptGUI herausziehen.
    Die Position ist nur relativ zum HauptGUI.

    Hier nochmal die Bilder im Anhang.


    MfG
    qixx