Hey
Ich möchte mit _WinAPI_DrawIconEx() auf ein hGraphics oder hBitmap (also mit Gdi+) zeichen, weil es sonst sehr flackert, weil ich mit Gdi+ auf einen Buffer zeichne und den dann auf die Graphics zeichne. Aber da ich ja nur direkt auf das DC zeichnen kann, frag ich euch ob ihr wisst wie das geht. Ich hab wirklich keine Ahnung wie ich das anstellen soll.
Hoffentlich versteht ihr mein Problem
Danke für alle Antworten
MfG AntiSpeed
hGraphics oder hBitmap von hDC - mit _WinAPI_DrawIconEx direkt auf Gdi+ Kontext
-
- [ gelöst ]
-
AntiSpeed -
4. Februar 2011 um 23:06 -
Geschlossen -
Erledigt
-
-
erstell dir doch mit CreateCompatibleBitmap/DC etwas wodrauf du das icon malen kannst und wandel dann die HBITMAP in eine GDI+ Bitmap um, das müsste doch funktionieren oder?
-
Leider nicht
[autoit]
[/autoit]
$hGui = GUICreate($title, $width, $height, $x, $y, BitOR($WS_POPUP,$DS_SETFOREGROUND))
GUISetState(@SW_SHOW)
$hDC = _WinAPI_GetDC($hGui)
$hBitmap = _WinAPI_CreateCompatibleBitmap($hDC,$width,$height)
while 1
_WinAPI_DrawIconEx($hBitmap,$hIcon, ... )
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap2, 0, 0, $width, $height); $hBitmap2 ist das das Bitmap von der Graphics von Gdi+
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $width, $height)
_GDIPlus_GraphicsClear($GDI_Buffer,0xFFF0F0F0)
wend -
Hi,
in Steganographie....Verstecken statt Verschlüsseln
habe ich icons extrahiert und in einen HDC geblittetZitatweil es sonst sehr flackert,
es flackert nur, wenn du keinen Backbuffer benutzt!
-
Du kannst auch einfach eine Bitmap aus dem "HICON" erstellen.
Spoiler anzeigen
[autoit]#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <Constants.au3>
#include <GDIPlus.au3>$sIconPath = FileOpenDialog("Icon öffnen", @ScriptDir, "Icon Files (*.ico)")
[/autoit] [autoit][/autoit] [autoit]
If @error Then Exit$hWnd = GUICreate("Icon Test", 200, 200)
[/autoit] [autoit][/autoit] [autoit]
GUISetState()_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)
_GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)$hIcon = _WinAPI_LoadImage(0, $sIconPath, $IMAGE_ICON, 0, 0, $LR_LOADFROMFILE)
[/autoit] [autoit][/autoit] [autoit]
$hBitmap_Icon = _GDIPlus_BitmapCreateFromHICON($hIcon)
_WinAPI_DestroyIcon($hIcon)$iWidth = _GDIPlus_ImageGetWidth($hBitmap_Icon)
[/autoit] [autoit][/autoit] [autoit]
$iHeight = _GDIPlus_ImageGetHeight($hBitmap_Icon)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap_Icon, 100 - $iWidth / 2, 100 - $iHeight / 2, $iWidth, $iHeight)_GDIPlus_GraphicsDispose($hGraphic)
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_BitmapDispose($hBitmap_Icon)
_GDIPlus_Shutdown()While GUIGetMsg() <> -3
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
WEnd; #FUNCTION# ====================================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name...........: _GDIPlus_BitmapCreateFromHICON
; Description ...: Creates a Bitmap object based on an icon
; Syntax.........: _GDIPlus_BitmapCreateFromHICON($hIcon)
; Parameters ....: $hIcon - Handle to an icon
; Return values .: Success - Returns a handle to a new Bitmap object
; Failure - 0 and either:
; |@error and @extended are set if DllCall failed
; |$GDIP_STATUS contains a non zero value specifying the error code
; Remarks .......: After you are done with the object, call _GDIPlus_ImageDispose to release the object resources
; Related .......: _GDIPlus_ImageDispose, _WinAPI_LoadImage, _WinAPI_LoadIcon
; Link ..........; @@MsdnLink@@ GdipCreateBitmapFromHICON
; Example .......; Yes
; ===============================================================================================================================
Func _GDIPlus_BitmapCreateFromHICON($hIcon)
Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromHICON", "hwnd", $hIcon, "int*", 0)If @error Then Return SetError(@error, @extended, 0)
[/autoit]
$GDIP_STATUS = $aResult[0]
Return $aResult[2]
EndFunc ;==>_GDIPlus_BitmapCreateFromHICON -
Danke sehr
Jetzt hab ichs perfekt hinbekommenMfG AntiSpeed