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