Guten Abend allerseits,
ich bin in einer Sackgasse gelandet. Ich suche einen Ausweg mit dessen Hilfe ich per AutoIt PNG's teilweise darstellen kann.
Ich habe momentan 2 Bildcontatiner:
1. Bild: PNG als ganzes Hintergrundbild
2. Bild: kleines Bild auf dem 1. Bild, dass ein PNG-Bild teilweise darstellt (einen Ausschnitt aus der ganzen Bild-Datei)
Leider hab ich keine Idee, wie man das angehen könnte.
Könnt ihr mir weiterhelfen?
Zur Info:
Mein derzeitiger Ansatz zum darstellen der ganzen PNG-Bilder ist ein angepasstes Beispiel und sieht ungefähr folgendermaßen aus:
Spoiler anzeigen
; Dies ist (wahrscheinlich) noch kein lauffähiger Quellcode, er soll nur zur Veranschaulichung dienen
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <StaticConstants.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>
$Pfad_Bild1 = "C:\hintergrund.png" ;füllendes Hintergrundbild hier 800x600px
$Pfad_Bild2 = "C:\ausschnitt.png" ;dieses Bild ist z.B. 100x100pixel groß, dargestellt werden aber immer nur 40x40 pixel
$Handle_Bild1 = GUICtrlCreatePic("", 0, 0,800,600, BitOR($SS_NOTIFY, $WS_CLIPCHILDREN, $WS_CLIPSIBLINGS), $WS_EX_LAYERED)
$Handle_Bild2 = GUICtrlCreatePic("",20 , 20, 40, 40)
_GUICtrlStatic_SetPicture($Pfad_Bild1, $Handle_Bild1)
_GUICtrlStatic_SetPicture($Pfad_Bild2, $Handle_Bild2) ; <-- GENAU hier fehlt mir die Inspiration, wie bekomme ich nur einen Ausschnitt dagestellt?
;diese beiden Funktionen habe ich größtenteils einem Beispiel entnommen, dass ich mal gefunden habe.
[/autoit] [autoit][/autoit] [autoit]FUnc _GUICtrlStatic_SetPicture($File, $CtrlId)
local $h_Image = _GDIPlus_ImageLoadFromFile($File)
local $hScrDC = _WinAPI_GetDC(0)
local $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
local $h_Bitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($h_Image)
_GDIPlus_ImageDispose ($h_Image)
GUICtrlSetImage($CtrlId, "")
_SetBitmapToCtrl($CtrlId, $h_Bitmap)
_WinAPI_DeleteObject ($h_Bitmap)
EndFUnc
Func _SetBitmapToCtrl($CtrlId, $hBitmap)
Local Const $STM_SETIMAGE = 0x0172
Local Const $IMAGE_BITMAP = 0
Local Const $SS_BITMAP = 0xE
Local Const $GWL_STYLE = -16
Local $hWnd = GUICtrlGetHandle($CtrlId)
If $hWnd = 0 Then Return SetError(1, 0, 0)
; set SS_BITMAP style to control
Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE)
If @error Then Return SetError(2, 0, 0)
DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP))
If @error Then Return SetError(3, 0, 0)
Local $oldBmp = DllCall("user32.dll", "hwnd", "SendMessage", "hwnd", $hWnd, "int", $STM_SETIMAGE, "int", $IMAGE_BITMAP, "int", $hBitmap)
If @error Then Return SetError(4, 0, 0)
If $oldBmp[0] <> 0 Then _WinAPI_DeleteObject($oldBmp[0])
Return 1
EndFunc
Für Anregungen und Hilfestellungen wäre ich dankbar.
Es grüßt
JStaxton