Obtaining a Private Display Device Context

An application performing numerous drawing operations in the client area of its window must use a private display device context. To create this type of device context, the application must specify the CS_OWNDC constant for the style member of the WNDCLASS structure when registering the window class. After registering the window class, the application obtains a handle identifying a private display device context by calling the GetDC function.

The following example shows how to create a private display device context.

#include <windows.h>    // required for all Win32-based applications 
#include <stdio.h>      // C run-time header for i/o
#include <string.h>     // C run-time header for strtok 
#include "dc.h"         // specific to this program 
 
// Function prototypes.
 
BOOL InitApplication(HINSTANCE); 
long FAR PASCAL MainWndProc(HWND, UINT, UINT, LONG); 
 
// Global variables 
 
HINSTANCE hinst;       // handle of current instance 
HDC hdc;               // display device context handle 
 
BOOL InitApplication(HINSTANCE hinstance) 
{ 
    WNDCLASS  wc; 
 
    // Fill in the window class structure with parameters 
    // describing the main window. 
 
    wc.style = CS_OWNDC;         // Private-DC constant 
    wc.lpfnWndProc = (WNDPROC) MainWndProc; 
 
    wc.cbClsExtra = 0; 
    wc.cbWndExtra = 0; 
    wc.hInstance = hinstance; 
 
    wc.hIcon = LoadIcon((HINSTANCE) NULL, 
        MAKEINTRESOURCE(IDI_APPLICATION)); 
 
    wc.hCursor = LoadCursor((HINSTANCE) NULL, 
        MAKEINTRESOURCE(IDC_ARROW)); 
 
    wc.hbrBackground = GetStockObject(WHITE_BRUSH); 
    wc.lpszMenuName =  "GenericMenu"; 
    wc.lpszClassName = "GenericWClass"; 
 
    // Register the window class and return the resulting code. 
 
    return RegisterClass(&wc); 
} 
 
LRESULT APIENTRY MainWndProc( 
        HWND hwnd,           // window handle 
        UINT message,        // type of message 
        WPARAM wParam,       // additional information 
        LPARAM lParam)       // additional information 
{ 
 
    PAINTSTRUCT ps;              // paint structure 
 
    // Retrieve a handle identifying the private DC. 
 
    hdc = GetDC(hwnd); 
 
    switch (message) 
    { 
        case WM_PAINT: 
              BeginPaint(hwnd, &ps); 
 
        // Draw and paint using private DC.