UDF > WinAPIEx > Theme >


_WinAPI_BeginBufferedPaint

Commence une opération de peinture en mémoire tampon

#include <WinAPITheme.au3>
_WinAPI_BeginBufferedPaint ( $hDC, $tTarget, ByRef $hNewDC [, $iFormat = 0 [, $iFlags = 0 [, $tExclude = 0 [, $iAlpha = -1]]]] )

Paramètres

$hDC Handle du DC cible dans lequel le tampon sera peint.
$tTarget Structure $tagRECT qui spécifie la zone du DC cible, à peindre.
$hNewDC Handle du nouveau contexte de périphérique.
$iFormat [optionnel] Le format de la mémoire tampon. Ce paramètre peut prendre l'une des valeurs suivantes:
$BPBF_COMPATIBLEBITMAP (par défaut)
$BPBF_DIB
$BPBF_TOPDOWNDIB
$BPBF_TOPDOWNMONODIB
$iFlags [optionnel] Les flags supplémentaires, une ou plusieurs des valeurs suivantes:
$BPPF_ERASE
$BPPF_NOCLIP
$BPPF_NONCLIENT
$tExclude [optionnel] La structure $tagRECT qui spécifie la zone qui est exclue de la zone de découpage.
$iAlpha [optionnel] La valeur de transparence alpha à utiliser sur l'ensemble du bitmap source.
Si ce paramètre n'est pas spécifié ou (-1) (par défaut ), le tampon source est copié vers la destination sans mélange.

Valeur de retour

Succès: Retourne le handle du contexte de peinture en tampon.
Échec: Retourne 0, appelez _WinAPI_GetLastError() pour obtenir des informations supplémentaires sur l'erreur.

Remarque

Cette fonction nécessite Windows Vista ou une version ultérieure.

Voir aussi

Consultez BeginBufferedPaint dans la librairie MSDN.

Exemple

#include <APIThemeConstants.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <SendMessage.au3>
#include <StaticConstants.au3>
#include <WinAPIGdi.au3>
#include <WinAPIGdiDC.au3>
#include <WinAPIHObj.au3>
#include <WinAPIIcons.au3>
#include <WinAPIMisc.au3>
#include <WinAPIRes.au3>
#include <WinAPIShellEx.au3>
#include <WinAPISys.au3>
#include <WinAPITheme.au3>
#include <WindowsConstants.au3>

If Number(_WinAPI_GetVersion()) < 6.0 Then
    MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', 'Nécessite Windows Vista ou une version ultérieure.')
    Exit
EndIf

; Charge un bitmap et une icône
Local $hTech = _WinAPI_LoadImage(0, @ScriptDir & '\Extras\Tech.bmp', $IMAGE_BITMAP, 0, 0, $LR_LOADFROMFILE)
Local $hIcon = _WinAPI_ShellExtractIcon(@ScriptDir & '\Extras\NVIDIA.ico', 0, 256, 256)

; Crée une GUI
GUICreate('Test '& StringReplace(@ScriptName, '.au3', '()'), 302, 302, -1, -1, $WS_POPUP, $WS_EX_TOPMOST)
GUICtrlCreatePic('', 0, 0, 302, 302)
Local $hPic = GUICtrlGetHandle(-1)

; Initialise la peinture en tampon
_WinAPI_BufferedPaintInit()

; Sélectionne le bitmap dans le DC
Local $hDC = _WinAPI_GetDC($hPic)
Local $hSrcDC = _WinAPI_CreateCompatibleDC($hDC)
Local $hSrcSv = _WinAPI_SelectObject($hSrcDC, $hTech)

; Commence l'opération de peinture en tampon
Local $hNewDC
Local $hBP = _WinAPI_BeginBufferedPaint($hSrcDC, _WinAPI_CreateRectEx(22, 22, 256, 256), $hNewDC, $BPBF_COMPATIBLEBITMAP, 0, 0, 160)

; Dessine l'icône avec alpha
_WinAPI_DrawIconEx($hNewDC, 22, 22, $hIcon)

; Termine l'opération de peinture en tampon et met à jour la référence DC
_WinAPI_EndBufferedPaint($hBP)

; Fusionne les ressources bitmap et libère les ressources
Local $hDestDC = _WinAPI_CreateCompatibleDC($hDC)
Local $hBitmap = _WinAPI_CreateCompatibleBitmapEx($hDC, 302, 302, 0x606060)
Local $hDestSv = _WinAPI_SelectObject($hDestDC, $hBitmap)
_WinAPI_BitBlt($hDestDC, 1, 1, 300, 300, $hSrcDC, 0, 0, $MERGECOPY)
_WinAPI_SelectObject($hDestDC, $hDestSv)
_WinAPI_DeleteDC($hDestDC)
_WinAPI_SelectObject($hSrcDC, $hSrcSv)
_WinAPI_DeleteDC($hSrcDC)
_WinAPI_ReleaseDC($hPic, $hDC)
_WinAPI_DeleteObject($hTech)
_WinAPI_DestroyIcon($hIcon)

; Définit le bitmap dans le contrôle Pic
_SendMessage($hPic, $STM_SETIMAGE, 0, $hBitmap)
Local $hObj = _SendMessage($hPic, $STM_GETIMAGE)
If $hObj <> $hBitmap Then
    _WinAPI_DeleteObject($hBitmap)
EndIf

; Ferme la peinture en tampon
_WinAPI_BufferedPaintUnInit()

GUISetState(@SW_SHOW)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE