Fenster vergrößern ändern - WinMove

  • Hi,

    Ich möchte meine Form einer bestimmten Gegebenheit anpassen. Leider habe ich ein Problem mit WinMove. Mit der Funktion WinMove, wird das Fenster immer etwas kleiner, als es eig. werden müsste.

    Um das zu veranschaulichen, habe ich mal diesen Code vorbereitet:

    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <WindowsConstants.au3>
    Example()
    Func Example()
    Local $hGUI = GUICreate("Example")
    Local $iOK = GUICtrlCreateButton("OK", 310, 370, 85, 25)
    $hGui = GUICreate("Test", 600, 480,10,10)
    GUISetState(@SW_SHOW, $hGUI)

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

    sleep(3000)
    Local $aPos = WinGetPos($hGui)
    WinMove($hGui, "",$aPos[0],$aPos[1],600, 480)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $iOK
    ExitLoop

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

    EndSwitch
    WEnd

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

    [/code]

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


    Das Fenster wird auf die Größe 600x 480 mit WinMove verändert,es wird jedoch kleiner, als das vorher mit 600x 480 Pixel große über GUICreate erstellte Fenster.

    Idealerweise sollte die Fenstergröße dann gleich bleiben.

    Warum ist das so, welche Logik steckt dahinter? Ich könnte jetzt zwar durch herausfinden eine bestimmte Anzahl Pixel dazu addieren. Dann weiß ich aber nicht ob das Betriebssystem unabhängig ist oder von Windows-Styles beeinflusst wird etc.

    2 Mal editiert, zuletzt von KloMeister (28. Mai 2014 um 11:13)

    • Offizieller Beitrag

    Der Grund ist der, dass man bei GuiCreate die inneren Abmessungen angibt. WinMove benutzt aber die äußeren Abmessungen des Fensters.
    Du könntest Dir damit behelfen, diese Unterschiede mit WinGetPos und WinGetClientSize auszulesen und die Differenz der Werte zu der gewünschten Größe zu addieren.
    Das sieht dann ungefähr so aus:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

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

    Global $hGui = GUICreate('Test', 480, 160)
    GUISetState()

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

    Sleep(1000)
    _WinMoveClientSize($hGui, 50, 50, 640, 480)
    $aWinSize = WinGetClientSize($hGui)
    _ArrayDisplay($aWinSize, 'Auflösung innen:')

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

    Do
    Until GUIGetMsg() = -3

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

    Func _WinMoveClientSize($hGui, $iX, $iY, $iWidth, $iHeight)
    Local $aWinPos = WinGetPos($hGui)
    If @error Then Return SetError(@error, 0, '')
    Local $aClientSize = WinGetClientSize($hGui)
    If @error Then Return SetError(@error, 0, '')
    Local $iNewWidth = $iWidth + $aWinPos[2] - $aClientSize[0]
    Local $iNewHeight = $iHeight + $aWinPos[3] - $aClientSize[1]
    WinMove($hGui, '', $iX, $iY, $iNewWidth, $iNewHeight)
    Return SetError(@error, 0, '')
    EndFunc

    [/autoit]