hGraphics oder hBitmap von hDC - mit _WinAPI_DrawIconEx direkt auf Gdi+ Kontext

  • 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 :thumbup:
    MfG AntiSpeed

    Nur keine Hektik - das Leben ist stressig genug

    Einmal editiert, zuletzt von AntiSpeed (5. Februar 2011 um 14:30)

  • Leider nicht ?(

    [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

    [/autoit]

    Nur keine Hektik - das Leben ist stressig genug

  • Hi,
    in Steganographie....Verstecken statt Verschlüsseln
    habe ich icons extrahiert und in einen HDC geblittet

    Zitat

    weil 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>
    #include <Constants.au3>
    #include <GDIPlus.au3>

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

    $sIconPath = FileOpenDialog("Icon öffnen", @ScriptDir, "Icon Files (*.ico)")
    If @error Then Exit

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

    $hWnd = GUICreate("Icon Test", 200, 200)
    GUISetState()

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

    _GDIPlus_Startup()

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

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 2)
    _GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)

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

    $hIcon = _WinAPI_LoadImage(0, $sIconPath, $IMAGE_ICON, 0, 0, $LR_LOADFROMFILE)
    $hBitmap_Icon = _GDIPlus_BitmapCreateFromHICON($hIcon)
    _WinAPI_DestroyIcon($hIcon)

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

    $iWidth = _GDIPlus_ImageGetWidth($hBitmap_Icon)
    $iHeight = _GDIPlus_ImageGetHeight($hBitmap_Icon)
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap_Icon, 100 - $iWidth / 2, 100 - $iHeight / 2, $iWidth, $iHeight)

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

    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_BitmapDispose($hBitmap_Icon)
    _GDIPlus_Shutdown()

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

    While GUIGetMsg() <> -3
    WEnd

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

    ; #FUNCTION# ====================================================================================================================
    ; 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)

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

    If @error Then Return SetError(@error, @extended, 0)
    $GDIP_STATUS = $aResult[0]
    Return $aResult[2]
    EndFunc ;==>_GDIPlus_BitmapCreateFromHICON

    [/autoit]