Lupe Gestrecktes Fenster GUI Fenster anpassen

  • Hallo ich habe eine Lupe erstellt und habe hierfür einmal ein GUI Fenster "$GUI Create" in dem die Lupe angezeigt werden soll und einmal das Gestreckte Fenster "Func Scope()" das sich leider nicht dem GUI Fenster anpasst.
    Die Variablen breite zoom und hohe sind durch input boxen definiert.


    Hat jemand eine Idee wie ich es hinbekomme das sich die größe des $GUI Fensters automatisch der Größe des "Func Scope()" Fensters (der den gewünschten Bereich streckt) anpasst?

    Wenn noch was unklar ist oder ihr es nicht verstanden habt bitte fragen = D danke
    neo

    Spoiler anzeigen
    [autoit]


    Global $GUI=GUICreate ( "scope",$breite*$zoom, $hohe*$zoom, _
    MouseGetPos (0), MouseGetPos (1))
    GUISetState ()
    While 1
    scope()
    If ($LastPos[0] <> 100 Or $LastPos[1] <> 100) Then
    WinMove("scope", "", 100,100)
    $LastPos[0] = 100
    $LastPos[1] = 100
    EndIf
    Func scope()
    $DeskHDC = DLLCall("user32.dll","int","GetDC","hwnd",0)
    $GUIHDC = DLLCall("user32.dll","int","GetDC","hwnd",$GUI)
    If Not @error Then
    DLLCall("gdi32.dll", "int", "StretchBlt", "int", $GUIHDC[0], "int", _
    0, "int", 0, "int", $breite * $zoom, "int", $hohe * $zoom, "int", $DeskHDC[0], "int", _
    MouseGetPos (0) - $breite/2, "int", MouseGetPos (1) - $hohe/2, "int", $breite,"int", $hohe, _
    "long", $SRCCOPY)
    DLLCall("user32.dll","int","ReleaseDC","int",$DeskHDC[0],"hwnd",0)
    DLLCall("user32.dll","int","ReleaseDC","int",$GUIHDC[0],"hwnd",$GUI)
    EndIf
    EndFunc

    [/autoit]
  • es gibt ein fenster gui und in dem gui eine zone die gestreckt wird wenn ich das gui fenster verkleiner oder vergrößere dann ist das gestreckte fenster nicht mehr passend

  • jap hab ich versucht (ich hab ne menge versucht) irgendwo bei Func scope() muss ich Wingetpos reinbringen aber es hat nicht geklappt hast du ne idee wo genau?

  • RICHTIG *freu*^^ denn der mittelpunkt des fensters ist dort wo der mauszeiger hinzeit wenn nur das fenster wächst verschiebt sich dieser mittelpunkt

    • Offizieller Beitrag

    Hi,

    warum reicht sowas nicht?

    Zeig doch mal das gestem Skript.

    [autoit]

    #include<WindowsConstants.au3>
    #include<GUIConstantsEx.au3>
    Opt("WinTitleMatchMode", 4)
    Opt('GUICloseOnESC', 1)
    Opt('GUIOnEventMode', 1)

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

    $MagWidth = 150
    $MagHeight = 150
    $MagZoom = 2;1.00000000000000001
    Global $dll[3], $DeskHDC, $GUIHDC

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

    $dll[1] = DllOpen("user32.dll")
    $dll[2] = DllOpen("gdi32.dll")

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

    Global $shell = WinGetPos("classname=Shell_TrayWnd")
    Global $GUI = GUICreate("Gui", 160, 160, @DesktopWidth - 160, @DesktopHeight - 160 - $shell[3], $WS_POPUP, $WS_EX_TOPMOST)
    GUISetOnEvent($GUI_EVENT_CLOSE, "OnAutoItExit")
    GUISetState(@SW_SHOW)

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

    $DeskHDC = DllCall("user32.dll", "int", "GetDC", "hwnd", 0)
    $GUIHDC = DllCall("user32.dll", "int", "GetDC", "hwnd", $GUI)

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

    While 1
    MAG()
    Sleep(5)
    WEnd

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

    Func MAG()
    DllCall("gdi32.dll", "int", "StretchBlt", "int", $GUIHDC[0], "int", _
    0, "int", 0, "int", $MagWidth * $MagZoom, "int", $MagHeight * $MagZoom, "int", $DeskHDC[0], "int", _
    MouseGetPos(0) - $MagWidth / 2, "int", MouseGetPos(1) - $MagHeight / 2, "int", $MagWidth, "int", $MagHeight, _
    "long", $SRCCOPY)
    EndFunc ;==>MAG

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

    Func OnAutoItExit()
    DllCall("user32.dll", "int", "ReleaseDC", "int", $DeskHDC[0], "hwnd", 0)
    DllCall("user32.dll", "int", "ReleaseDC", "int", $GUIHDC[0], "hwnd", $GUI)
    DllClose($dll[1])
    DllClose($dll[2])
    Exit(0)
    EndFunc ;==>OnAutoItExit

    [/autoit]

    Mega

  • Ok dann teste mal bitte dieses Script drück F1 um den Zoomfaktor zu erhöhen dann merkst du was nicht funktioniert

    Spoiler anzeigen
    [autoit]


    #include<WindowsConstants.au3>
    #include<GUIConstantsEx.au3>
    Opt("WinTitleMatchMode", 4)
    Opt('GUICloseOnESC', 1)
    Opt('GUIOnEventMode', 1)
    HotKeySet ("{F1}","Zoom")
    $MagWidth = 150
    $MagHeight = 150
    $MagZoom = 2;1.00000000000000001
    Global $dll[3], $DeskHDC, $GUIHDC
    Global $SRCCOPY = 0x00CC0020
    $dll[1] = DllOpen("user32.dll")
    $dll[2] = DllOpen("gdi32.dll")

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

    Global $shell = WinGetPos("classname=Shell_TrayWnd")
    Global $GUI = GUICreate("Gui", 160, 160, @DesktopWidth - 160, @DesktopHeight - 160 - $shell[3], $WS_POPUP, $WS_EX_TOPMOST)
    GUISetOnEvent($GUI_EVENT_CLOSE, "OnAutoItExit")
    GUISetState(@SW_SHOW)

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

    $DeskHDC = DllCall("user32.dll", "int", "GetDC", "hwnd", 0)
    $GUIHDC = DllCall("user32.dll", "int", "GetDC", "hwnd", $GUI)

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

    While 1
    MAG()
    Sleep(5)
    WEnd

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

    Func Zoom()
    $MagZoom = $MAgZoom +1
    endfunc
    Func MAG()
    DllCall("gdi32.dll", "int", "StretchBlt", "int", $GUIHDC[0], "int", _
    0, "int", 0, "int", $MagWidth * $MagZoom, "int", $MagHeight * $MagZoom, "int", $DeskHDC[0], "int", _
    MouseGetPos(0) - $MagWidth / 2, "int", MouseGetPos(1) - $MagHeight / 2, "int", $MagWidth, "int", $MagHeight, _
    "long", $SRCCOPY)
    EndFunc ;==>MAG

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

    Func OnAutoItExit()
    DllCall("user32.dll", "int", "ReleaseDC", "int", $DeskHDC[0], "hwnd", 0)
    DllCall("user32.dll", "int", "ReleaseDC", "int", $GUIHDC[0], "hwnd", $GUI)
    DllClose($dll[1])
    DllClose($dll[2])
    Exit(0)
    EndFunc ;==>OnAutoItExit

    [/autoit]
  • Die MAG() Funktion macht das vergrößern eben falsch :) Es muss als Ziel immer die Größe deines Fensters angegeben werden, als Quelle auf dem Bildschirm aber die Größe durch den Zoomfaktor, nicht andersrum :D

    Spoiler anzeigen
    [autoit]

    Func MAG()
    Local $magZoomedWidth = $MagWidth / $MagZoom , $magZoomedHeight = $MagHeight / $MagZoom
    DllCall("gdi32.dll", "int", "StretchBlt", "int", $GUIHDC[0], "int", _
    0, "int", 0, "int", $MagWidth, "int", $MagHeight, "int", $DeskHDC[0], "int", _
    MouseGetPos(0) - ($magZoomedWidth / 2), "int", MouseGetPos(1) - ($magZoomedHeight / 2), "int", $magZoomedWidth, "int", $magZoomedHeight, _
    "long", $SRCCOPY)
    EndFunc ;==>MAG

    [/autoit]