Search
Module:
Directory

   Desktop Functions:

   Smart Device Functions:


Show Recent Changes
Subscribe (RSS)
Misc. Pages
Comments
FAQ
Helpful Tools
Playground
Suggested Reading
Website TODO List
Download Visual Studio Add-In

GetDC (user32)
 
.
Summary
Summary
The GetDC function retrieves a handle to a device context (DC) for the client area of a specified window or for the entire screen. You can use the returned handle in subsequent GDI functions to draw in the DC. The device context is an opaque data structure, whose values are used internally by GDI. The GetDCEx function is an extension to GetDC, which gives an application more control over how and whether clipping occurs in the client area.

C# Signature:

[DllImport("user32.dll")]
static extern IntPtr GetDCEx(IntPtr hWnd, IntPtr hrgnClip, DeviceContextValues flags);
static extern IntPtr GetDC(HandleRef hWnd);

VB.NET Signature:

<DllImport("user32.dll")> _
Private Shared Function GetDCEx(ByVal hWnd As IntPtr, ByVal hrgnClip As IntPtr, ByVal DeviceContextValues As DeviceContextValues) As IntPtr
Private Shared Function GetDC(ByVal hwnd As IntPtr) As IntPtr
End Function

VB Signature:

Private Declare Function Lib "user32.dll" GetDCEx(ByVal hWnd As IntPtr, ByVal hrgnClip As IntPtr, ByVal DeviceContextValues As DeviceContextValues) As IntPtr

User-Defined Types:

DeviceContextValues

Notes:

Retrieves a handle to a display device context (DC) for the client area of a specified window or for the entire screen.

None.

You can use the returned handle in subsequent GDI functions to draw in the DC.

Notes:

Given the level of transparency provided by the System.Drawing.Graphics class, it is probably better to use that instead of GetDC.

Remember, if you use GetDC manually without the Graphics class, you must call ReleaseDC.

This method can also be declared using an IntPtr instead of a HandleRef. Using a HandleRef ensures that the window will not be destroyed/GCed while the function is executing.

This function is an extension to the GetDC function, which gives an application more control over how and whether clipping occurs in the client area.

Unless the display DC belongs to a window class, the ReleaseDC function must be called to release the DC after painting. Also, ReleaseDC must be called from the same thread that called GetDCEx. The number of DCs is limited only by available memory.

<param name="hWnd">

Handle to the window whose DC is to be retrieved. If this value is NULL, GetDCEx retrieves the DC for the entire screen.</param>

<param name="hrgnClip">

Specifies a clipping region that may be combined with the visible region of the DC. If the value of flags 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, applications should not use the region—not even delete it—after a successful call to GetDCEx.</param>

<param name="flags">

Specifies how the DC is created. This parameter can be one or more of the DeviceContextValues enumeration.</param>

If the function succeeds, the return value is the handle to the DC for the specified window.If the function fails, the return value is NULL.</para>

An invalid value for the hWnd parameter will cause the function to fail.

Windows NT/2000/XP: To get extended error information, call GetLastError.

Unless the display DC belongs to a window class, the ReleaseDC function must be called to release the DC after painting. Also, ReleaseDC must be called from the same thread that called GetDCEx. The number of "DCs" is limited only by available memory.

Tips & Tricks:

Please add some!

Sample Code:

Please add some!!

To get the DC for a specific display monitor, use the EnumDisplayMonitors and CreateDC functions.

Alternative Managed API:

Do you know one? Please contribute it!

Sample Code:

Please add some!

Documentation
GetDCEx on MSDN

Alternative Managed API:

System.Drawing.Graphics.FromHwnd(IntPtr hwnd)

Documentation
GetDC on MSDN

Please edit this page!

Do you have...

  • helpful tips or sample code to share for using this API in managed code?
  • corrections to the existing content?
  • variations of the signature you want to share?
  • additional languages you want to include?

Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).

 
Access PInvoke.net directly from VS:
Terms of Use
Edit This Page
Find References
Show Printable Version
Revisions