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 )
$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 |
Succès: | Retourne le handle du DC pour la fenêtre spécifiée. |
Échec: | Retourne 0. |
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.
Consultez GetDCEx dans la librairie MSDN.
#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