Retrieves a handle to a device context (DC) for the client area of a specified window
#include <WinAPIGdiDC.au3>
_WinAPI_GetDCEx ( $hWnd, $hRgn, $iFlags )
$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 |
Success: | Handle to the DC for the specified window. |
Failure: | 0. |
Unless the display DC belongs to a window class, the _WinAPI_ReleaseDC() function must be called to release the DC after painting.
Search GetDCEx in MSDN Library.
#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(($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