/// <summary>Releases a device context (DC), freeing it for use by other applications.</summary>
/// <remarks><para>The effect of the ReleaseDC function depends on the type of DC. It
/// frees only common and window DCs. It has no effect on class or private DCs.</para>
/// <para>The application must call the ReleaseDC function for each call to the
/// GetWindowDC function and for each call to the GetDC function that retrieves a
/// common DC. </para><para>An application cannot use the ReleaseDC function to release
/// a DC that was created by calling the CreateDC function; instead, it must use the
/// DeleteDC function. ReleaseDC must be called from the same thread that called
/// GetDC.</para></remarks>
/// <param name="hWnd">Handle to the window whose DC is to be released.</param>
/// <param name="hDC">Handle to the DC to be released.</param>
/// <returns>The return value indicates whether the DC was released. If the DC was
/// released, the return value is 1. If the DC was not released, the return value is
/// zero.</returns>
[DllImport("user32.dll")]
static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
Declare Function ReleaseDC Lib "user32.dll" _
(hWnd As IntPtr, hDC As IntPtr) As Integer
The application must call the ReleaseDC function for each call to the GetWindowDC function and for each call to the GetDC function that retrieves a common DC.
An application cannot use the ReleaseDC function to release a DC that was created by calling the CreateDC function; instead, it must use the DeleteDC function. ReleaseDC must be called from the same thread that called GetDC.
Using managed DC functions for API's that require the DC work almost just as well as the API DC functions themselves.
See TextOut or GetTextExtentPoint for a sample of using DC's in C# managed code.
Graphics.GetHdc()
Graphics.ReleaseHdc()
8-5-06 Update by Gabriel T. Sharp (osirisgothra@hotmail.com)