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 Windows apps */

#include <stdio.h>

#include <string.h> /* 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

* resultant 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. */

.