- Offizieller Beitrag
Ich bräuchte mal eure Hilfe.
Ich möchte ein Pic-Control nach der Anzeige eines Bildes mit GDI+ wieder transparent haben, sodass ein neues Bild nicht über dem alten Bild angezeigt wird, sondern nur das neue Bild angezeigt wird.
Hier mal ein Beispiel (wie es nicht aussehen soll):
AutoIt
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WinAPI.au3>
Opt('GUIOnEventMode', 1)
$sPath = 'c:\Program Files (x86)\AutoIt3\Examples\GUI\'
_GDIPlus_Startup()
$hGui = GUICreate('Test', 800, 600)
GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
GUISetBkColor(0xF0F0F0)
GUICtrlCreatePic($sPath & "msoobe.jpg", 0, 0, 800, 600)
GUICtrlSetState(-1, $GUI_DISABLE)
$idPic = GUICtrlCreatePic('', 80, 60, 440, 440)
GUISetState(@SW_SHOW, $hGui)
$hPic = GUICtrlGetHandle($idPic)
$aCtrlSize = WinGetClientSize($hPic)
$hBitmap = _GDIPlus_BitmapCreateFromScan0($aCtrlSize[0], $aCtrlSize[1])
$hGfxCtxt = _GDIPlus_ImageGetGraphicsContext($hBitmap)
$hImage = _GDIPlus_BitmapCreateFromFile($sPath & 'Torus.png')
_GDIPlus_GraphicsDrawImageRect($hGfxCtxt, $hImage, 0, 0, $aCtrlSize[0], $aCtrlSize[1])
$hBMP = _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap)
_WinAPI_DeleteObject(GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hBMP))
_WinAPI_DeleteObject($hBMP)
MsgBox(0, 'Test', 'Nach dem schließen dieser MsgBox soll das große Bild Torus.png weg sein' & @CR & 'und nur noch das kleine Bild angezeigt werden.')
_GDIPlus_GraphicsDrawImageRect($hGfxCtxt, $hImage, 0, 0, $aCtrlSize[0] / 2, $aCtrlSize[1] / 2)
$hBMP = _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap)
_WinAPI_DeleteObject(GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hBMP))
_WinAPI_DeleteObject($hBMP)
WinWaitClose($hGui)
_GDIPlus_GraphicsDispose($hGfxCtxt)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_BitmapDispose($hImage)
_GDIPlus_Shutdown()
Exit
Func _CloseGui()
GUIDelete($hGui)
EndFunc
Alles anzeigen
Hat jemand eine Idee, wie man das hinkriegen kann?
Und bitte nicht das Pic-Control löschen und neu erstellen. Das ist keine Alternative.