Obtención de un contexto de dispositivo de pantalla privada
Una aplicación que realiza numerosas operaciones de dibujo en el área cliente de su ventana debe usar un controlador de dominio de pantalla privado. Para crear este tipo de controlador de dominio, la aplicación debe especificar la constante CS_OWNDC para el miembro de estilo de la estructura WNDCLASS al registrar la clase de ventana. Después de registrar la clase de ventana, la aplicación obtiene un identificador que identifica un controlador de dominio de visualización privado mediante una llamada a la función GetDC .
En el ejemplo siguiente se muestra cómo crear un controlador de dominio de visualización privado.
#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;
}