Hi,
inzwischen ist der Wald derart dicht bewachsen, dass ich anscheinend keinen einzelnen Baum mehr erkennen kann.
Ich habe mir mal genauer die Lupenfunktion angesehen und stehe nun vor dem Problem, dass ich es nicht schaffe, z. B. vier Lupenfenster in einer Schleife zu erstellen. Einzeln klappt es zwar, dennoch bin ich mir auch hier nicht sicher, ob ich die verschiedenen Aufrufe (DllCall-Call, -Open –Release) oder auch das Handling von $GUIHDC und $GUIHDC[0]) an die richtigen Stellen im Code positioniert habe oder nicht.
An DLLs habe ich mich bisher erfolgreich vorbei gedrückt... bisher ...
Lange Rede, kurzer Sinn:
Kann sich einer erbarmen, mir auf die Sprünge zu helfen, um mehrere Lupenfenster in einer Schleife zu erstellen und die verschiedenen DLL-Aufrufe richtig im Code zu positionieren?
Code mit einem Lupenfenster:
[autoit]; Autoren: Code-Schnipsel von diversen Mods und Usern aus dem Autoit-Forum
[/autoit][autoit][/autoit][autoit]#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("MustDeclareVars", 1)
[/autoit][autoit][/autoit][autoit]Global $hGUI, $floor1, $floor2, $hImage1, $hImage2, $hGraphic1, $hGraphic2
Global $PIC, $PicX, $PicY
Global $msg, $load, $clear
Global $dll[3], $DeskHDC, $GUIHDC
[/autoit][autoit][/autoit][autoit]$dll[1] = DllOpen ( "user32.dll")
$dll[2] = DllOpen ( "gdi32.dll")
Global $MagWidth = 500
Global $MagHeight = 500
Global $MagZoom = 1
$hGUI = GUICreate("Meine Zeichnung", 1200, 600)
[/autoit][autoit][/autoit][autoit]$load = GUICtrlCreateButton("Load Pic", 540, 40, 60)
;$clear = GUICtrlCreateButton("Clear Pic", 540, 70, 60)
$floor1 = GUICtrlCreateGraphic(20, 20, 500, 500)
GUICtrlSetBkColor($floor1, 0xffffff)
;GUICtrlSetColor($floor1, 0)
$floor2 = GUICtrlCreateGraphic(620, 20, 500, 500)
GUICtrlSetBkColor($floor2, 0xffffff)
GUISetState()
[/autoit][autoit][/autoit][autoit][/autoit][autoit]$DeskHDC = DLLCall("user32.dll","int","GetDC","hwnd",0)
$GUIHDC = DLLCall("user32.dll","int","GetDC","hwnd",GUICtrlGetHandle($floor2))
_GDIPlus_Startup()
$hGraphic1 = _GDIPlus_GraphicsCreateFromHWND(GUICtrlGetHandle($floor1))
While 1
[/autoit][autoit][/autoit][autoit]$msg = GUIGetMsg()
[/autoit][autoit][/autoit][autoit]_MAG()
[/autoit][autoit][/autoit][autoit]Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $load
_load()
Case $msg = $clear
;_clearPIC()
EndSelect
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
_GDIPlus_ImageDispose($hImage1)
_GDIPlus_GraphicsDispose($hGraphic1)
_GDIPlus_Shutdown()
DllClose ($dll[1])
DllClose ($dll[2])
Func _MAG()
If Not @error Then
Local $Result = DllCall("gdi32.dll", "int", "StretchBlt", "int", $GUIHDC[0], "int", _
100, "int", 125 , "int", $MagWidth/4 * $MagZoom, "int", $MagHeight/4 * $MagZoom, "int", $DeskHDC[0], "int", _
MouseGetPos(0), "int", MouseGetPos(1), "int", $MagWidth/4, "int", $MagHeight/4, _
"long", $SRCCOPY)
EndIf
DLLCall("user32.dll","int","ReleaseDC","int",$DeskHDC[0],"hwnd",0)
DLLCall("user32.dll","int","ReleaseDC","int",$GUIHDC[0],"hwnd",GUICtrlGetHandle($floor2))
EndFunc
Func _load()
$PIC = FileOpenDialog("Bitte Bild auswählen", "C:\", "Bilder (*.jpg;*.bmp;*.png)", 1 + 4 )
_GDIPlus_GraphicsClear($hGraphic1, 0xFFece9d8)
$hImage1 = _GDIPlus_ImageLoadFromFile ($PIC)
$PicX = _GDIPlus_ImageGetWidth($hImage1)
$PicY = _GDIPlus_ImageGetHeight($hImage1)
$hGraphic1 = _GDIPlus_GraphicsCreateFromHWND (GUICtrlGetHandle($floor1))
[/autoit][autoit][/autoit][autoit]_GDIPlus_GraphicsDrawImage ($hGraphic1, $hImage1, 0, 0)
; _GDIPlus_GraphicsDrawRect($hGraphic1, 0, 0, $PicX, $PicY)
EndFunc
Func _clearPic()
_GDIPlus_GraphicsClear($hGraphic1, 0xFFFFFFFF) ;0xFFece9d8)
;_GDIPlus_GraphicsClear($hGraphic2, 0xFFece9d8)
EndFunc