Function Reference


_WinAPI_GetDCEx

Retrieves a handle to a device context (DC) for the client area of a specified window

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

Parameters

$hWnd Handle to the window whose DC is to be retrieved.
If this value is 0, _WinAPI_GetDCEx() retrieves the DC for the entire screen.
If the value of $iFlags parameter is $DCX_INTERSECTRGN or DCX_EXCLUDERGN, then the operating system assumes ownership of the region and will automatically delete it when it is no longer needed.
In this case, the application should not use or delete the region after a successful call to _WinAPI_GetDCEx().
$hRgn A clipping region that may be combined with the visible region of the DC.
$iFlags Flags that specifies how the DC is created.
This parameter can be one or more of the following values:
    $DCX_WINDOW
    $DCX_CACHE
    $DCX_PARENTCLIP
    $DCX_CLIPSIBLINGS
    $DCX_CLIPCHILDREN
    $DCX_NORESETATTRS
    $DCX_LOCKWINDOWUPDATE
    $DCX_EXCLUDERGN
    $DCX_INTERSECTRGN
    $DCX_INTERSECTUPDATE
    $DCX_VALIDATE

Return Value

Success: Handle to the DC for the specified window.
Failure: 0.

Remarks

Unless the display DC belongs to a window class, the _WinAPI_ReleaseDC() function must be called to release the DC after painting.

Related

_WinAPI_ReleaseDC

See Also

Search GetDCEx in MSDN Library.

Example

#include <APIGdiConstants.au3>
#include <FontConstants.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIGdi.au3>
#include <WinAPISys.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 (_WinAPI_GetVersion() > '5.2') And (_WinAPI_DwmIsCompositionEnabled()) Then
    If MsgBox(BitOR($MB_YESNOCANCEL, $MB_ICONQUESTION, $MB_SYSTEMMODAL), 'DWM', 'This example works only if a Desktop Window Manager (DWM) composition is disabled.' & @CRLF & @CRLF & 'Do you want to disable DWM?') = 6 Then
        _WinAPI_DwmEnableComposition(0)
        $g_bDwm = True
    Else
        Exit
    EndIf
EndIf

OnAutoItExitRegister('OnAutoItExit')

; Create GUI
Global $g_hForm = GUICreate('Test ' & StringReplace(@ScriptName, '.au3', '()'), 400, 400)

; Register window proc
Global $g_hDll = DllCallbackRegister('_WinProc', 'ptr', 'hwnd;uint;long;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