Obtaining a Private Display Device Context
An application performing numerous drawing operations in the client area of its window must use a private display DC. To create this type of DC, 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 DC by calling the GetDC function.
The following example shows how to create a private display DC.
#include <windows.h> // required for all Windows-based applications
#include <stdio.h> // C run-time header for i/o
#include <string.h> // C run-time header for strtok_s
#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 to 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:
hdc = BeginPaint(hwnd, &ps);
// Draw and paint using private DC.
EndPaint(hwnd, &ps);
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}