maximierte GUI überlappt Taskleiste

  • Morgen,

    wieso überlappt meine GUI die Taskleiste?

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $hGui = GUICreate("Test", @DesktopWidth, @DesktopHeight, 0, 0, BitOR($WS_CAPTION, $WS_MINIMIZEBOX, $WS_SYSMENU, $WS_MAXIMIZE), $WS_EX_COMPOSITED)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]


    Und wie kann ich die GUI nicht verschiebbar machen?
    Ohne WM_MOVE und WinGetPos/WinMove.

    Einmal editiert, zuletzt von m-obi (9. November 2012 um 09:24)

  • Weil @DesktopHight und @DesktopWidht die komplette Desktopgröße ist.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Probiere es mal damit:

    Spoiler anzeigen
    [autoit]


    #include <WinAPI.au3>
    #include <MenuConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $aTaskbar = WinGetPos("[CLASS:Shell_TrayWnd;INSTANCE:1]", "")
    Global $iX, $iY, $iW, $iH

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

    If $aTaskbar[2] < @DesktopWidth Then ;Taskbar ist vertikal
    $iW = @DesktopWidth - $aTaskbar[2]
    $iH = @DesktopHeight
    $iY = 1
    If Not $aTaskbar[0] Then
    $iX = $aTaskbar[2]
    Else
    $iX = 1
    EndIf
    Else ;ansonsten ist die Taskbar horizontal
    $iW = @DesktopWidth
    $iH = @DesktopHeight - $aTaskbar[3]
    $iX = 1
    If Not $aTaskbar[1] Then
    $iY = $aTaskbar[3]
    Else
    $iY = 1
    EndIf
    EndIf

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

    Global Const $hGui = GUICreate("Test", $iW, $iH, $iX, $iY, Default, Default)

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

    Global Const $iWFrame = _WinAPI_GetSystemMetrics($SM_CXFRAME) / 2
    Global Const $iHFrame = _WinAPI_GetSystemMetrics($SM_CYFRAME) / 2

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

    WinMove($hGui, "", $iX, $iY, $iW - $iWFrame, $iH - $iHFrame)
    GUISetState()

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

    GUIRegisterMsg($WM_SYSCOMMAND, "On_WM_SYSCOMMAND")

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func On_WM_SYSCOMMAND($hWnd, $Msg, $wParam, $lParam)
    If BitAND($wParam, 0xFFF0) = $SC_MOVE Then Return False ;stop moves
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]

    Getestet auf Win7 x64 inkl. Aero.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    • Offizieller Beitrag

    Der "Fehler" tritt auf, weil Du $WS_MAXIMIZEBOX vergessen hast.
    So geht es einwandfrei:

    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $hGui = GUICreate("Test", @DesktopWidth, @DesktopHeight, 0, 0, BitOR($WS_CAPTION, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SYSMENU, $WS_MAXIMIZE), $WS_EX_COMPOSITED)
    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • Nur ich will das man es danach nicht mehr wiederherstellen kann. Also es soll maximiert bleiben.

    Edit: Habs. Hab es jetzt so gemacht.

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <MenuConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $hGui = GUICreate("Test", @DesktopWidth, @DesktopHeight, 0, 0, BitOR($WS_CAPTION, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SYSMENU, $WS_MAXIMIZE), $WS_EX_COMPOSITED)
    GUISetStyle(BitOR($WS_CAPTION, $WS_MINIMIZEBOX, $WS_SYSMENU, $WS_MAXIMIZE))
    GUISetState()

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

    GUIRegisterMsg($WM_SYSCOMMAND, "On_WM_SYSCOMMAND")

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    Func On_WM_SYSCOMMAND($hWnd, $Msg, $wParam, $lParam)
    If BitAND($wParam, 0xFFF0) = $SC_MOVE Then Return False ;stop moves
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]


    Danke euch!