Gui bewegen popup style

  • hallo
    ja es geht darum:
    Ich hab ein gui erstellt mit Popup style und ein parent gui mit ebenfalls Popup style um das Haupt gui bewegen zu können hab
    ich ein label erstellt mit $GUI_WS_EX_PARENTDRAG style leider geht das nicht
    also hab ich mich ran gemacht und eine Funktion geschrieben die beim $GUI_EVENT_PRIMARYDOWN berechnet wo die Maus sich gerade befindet
    und solange die Maus unten gehalten wird das Fenster bewegen soll geht gut aber das Fenster bewegt sich sehr langsam
    gibt es sonst noch Möglichkeiten das Fenster zu bewegen wenn ein parent gui oben drauf liegt??
    danke im voraus
    freue mich über jede Antwort
    mit freundlichen grüßen dpjeezy

    • Offizieller Beitrag

    Mit WM_MOVE geht das besser:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $hMainGui = GUICreate('Main', 600, 400, 100, 100, $WS_POPUP)
    GUISetBkColor(0xFFFFAA)
    GUICtrlCreateLabel(' Main', 0, 0, 600, 400, Default, $GUI_WS_EX_PARENTDRAG)
    GUISetState()
    $hChildGui = GUICreate('Child', 600, 400, 710, 100, $WS_POPUP)
    GUICtrlCreateLabel(' Child', 0, 0, 600, 400, Default, $GUI_WS_EX_PARENTDRAG)
    GUISetBkColor(0xAAFFFF)
    GUISetState()
    GUIRegisterMsg($WM_MOVE, 'WM_MOVE')

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func WM_MOVE($hWnd, $Msg, $wParam, $lParam)
    Local $xPos = BitAND($lParam, 0xFFFF), $yPos = BitShift($lParam, 16)
    If $hWnd = WinGetHandle($hMainGui) Then
    WinMove($hChildGui, '', $xPos + 610, $yPos)
    Else
    WinMove($hMainGui, '', $xPos - 610, $yPos)
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_MOVE

    [/autoit]
  • vielen dank "ich" hatte vorher ein problem weil meine GUI sich nicht bewegen konnte aber seit jetzt kann sie´s ^^ super dankeschön

    [autoit]


    #cs-----------------------------------------------------------------------------
    Hilfe ist immer gut also nimmt sie an ^^
    #ce-----------------------------------------------------------------------------

    [/autoit]
  • Die Position muss noch umgerechnet werden, da man den Wert ohne Vorzeichen bekommt:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $hMainGui = GUICreate('Main', 600, 400, 100, 100);, $WS_POPUP)
    GUISetBkColor(0xFFFFAA)
    GUICtrlCreateLabel(' Main', 0, 0, 600, 400, Default, $GUI_WS_EX_PARENTDRAG)
    GUISetState()
    $hChildGui = GUICreate('Child', 600, 400, 710, 100, $WS_POPUP)
    GUICtrlCreateLabel(' Child', 0, 0, 600, 400, Default, $GUI_WS_EX_PARENTDRAG)
    GUISetBkColor(0xAAFFFF)
    GUISetState()
    GUIRegisterMsg($WM_MOVE, 'WM_MOVE')

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func WM_MOVE($hWnd, $Msg, $wParam, $lParam)
    Local $xPos = BitAND($lParam, 0xFFFF), $yPos = BitShift($lParam, 16)
    If $xPos > 32767 Then $xPos -= 0x10000
    If $yPos > 32767 Then $yPos -= 0x10000
    If $hWnd = $hMainGui Then
    WinMove($hChildGui, '', $xPos + 610, $yPos)
    Else
    WinMove($hMainGui, '', $xPos - 610, $yPos)
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_MOVE

    [/autoit]