UDF > WinAPIEx > GDI > DeviceContext >


_WinAPI_GetDCEx

Obtient le handle du contexte de périphérique (DC) de la zone client d'une fenêtre spécifiée

#include <WinAPIGdiDC.au3>
_WinAPI_GetDCEx ( $hWnd, $hRgn, $iFlags )

Paramètres

$hWnd Handle de la fenêtre dont le DC doit être récupéré.
Si cette valeur est 0, _WinAPI_GetDCEx() récupère le DC pour la totalité de l'écran.
Si la valeur du paramètre $iFlags est $DCX_INTERSECTRGN ou DCX_EXCLUDERGN, le système d'exploitation devient propriétaire de la région et la supprimera automatiquement quand elle ne sera plus nécessaire.
Dans ce cas, l'application ne doit pas utiliser ou supprimer la région après un appel réussi à _WinAPI_GetDCEx().
$hRgn Une région de découpage qui peut être combinée avec la région visible du DC.
$iFlags Flags qui spécifient comment le DC est créé.
Ce paramètre peut être une ou plusieurs des valeurs suivantes:
    $DCX_WINDOW
    $DCX_CACHE
    $DCX_PARENTCLIP
    $DCX_CLIPSIBLINGS
    $DCX_CLIPCHILDREN
    $DCX_NORESETATTRS
    $DCX_LOCKWINDOWUPDATE
    $DCX_EXCLUDERGN
    $DCX_INTERSECTRGN
    $DCX_INTERSECTUPDATE
    $DCX_VALIDATE

Valeur de retour

Succès: Retourne le handle du DC pour la fenêtre spécifiée.
Échec: Retourne 0.

Remarque

Sauf si l'écran DC appartient à une classe de fenêtre, la fonction _WinAPI_ReleaseDC() doit être appelée pour libérer le DC après la peinture.

En relation

_WinAPI_ReleaseDC

Voir aussi

Consultez GetDCEx dans la librairie MSDN.

Exemple

#include <APIGdiConstants.au3>
#include <FontConstants.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIGdi.au3>
#include <WinAPIGdiDC.au3>
#include <WinAPIHObj.au3>
#include <WinAPISys.au3>
#include <WinAPISysWin.au3>
#include <WindowsConstants.au3>

Global $g_hFont = _WinAPI_CreateFont(16, 0, 0, 0, $FW_BOLD, 0, 0, 0, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_PITCH, $ANTIALIASED_QUALITY, 'Arial')

Global $g_bDwm = False
If (Number(_WinAPI_GetVersion()) > 5.2) And (_WinAPI_DwmIsCompositionEnabled()) Then
    If MsgBox(BitOR($MB_YESNOCANCEL, $MB_ICONQUESTION, $MB_SYSTEMMODAL), 'DWM', 'Cet exemple fonctionne seulement si la composition Desktop Window Manager (DWM) est désactivée.'& @CRLF & @CRLF & 'Voulez-vous désactiver DWM ?') = 6 Then
        _WinAPI_DwmEnableComposition(0)
        $g_bDwm = True
    Else
        Exit
    EndIf
EndIf

OnAutoItExitRegister('OnAutoItExit')

; Crée une GUI
Global $g_hForm = GUICreate('Test '& StringReplace(@ScriptName, '.au3', '()'), 400, 400)

; Inscrit la procédure fenêtre
Global $g_hDll = DllCallbackRegister('_WinProc', 'ptr', 'hwnd; uint; longtemps; ptr ')
Local $pDll = DllCallbackGetPtr($g_hDll)
Global $g_hProc = _WinAPI_SetWindowLong($g_hForm, $GWL_WNDPROC, $pDll)

GUISetState(@SW_SHOW)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func _WinProc($hWnd, $iMsg, $wParam, $lParam)
    Local $vRes = _WinAPI_CallWindowProc($g_hProc, $hWnd, $iMsg, $wParam, $lParam)

    Switch $iMsg
        Case $WM_NCACTIVATE, $WM_NCPAINT
            Local $hDC
            Switch $iMsg
                Case $WM_NCACTIVATE
                    $hDC = _WinAPI_GetWindowDC($hWnd)
                Case $WM_NCPAINT
                    $hDC = _WinAPI_GetDCEx($hWnd, $wParam, BitOR($DCX_WINDOW, $DCX_INTERSECTRGN))
            EndSwitch
            Local $hSv = _WinAPI_SelectObject($hDC, $g_hFont)
            _WinAPI_SetTextColor($hDC, 0x00FFFF)
            _WinAPI_SetBkMode($hDC, $TRANSPARENT)
            _WinAPI_TextOut($hDC, 25, 8, 'Test '& StringReplace(@ScriptName, '.au3', '()'))
            _WinAPI_SelectObject($hDC, $hSv)
            _WinAPI_ReleaseDC($hWnd, $hDC)
    EndSwitch
    Return $vRes
EndFunc   ;==>_WinProc

Func OnAutoItExit()
    _WinAPI_SetWindowLong($g_hForm, $GWL_WNDPROC, $g_hProc)
    DllCallbackFree($g_hDll)
    If $g_bDwm Then
        _WinAPI_DwmEnableComposition(1)
    EndIf
EndFunc   ;==>OnAutoItExit