Obtention d’un contexte d’appareil d’affichage privé
Une application effectuant de nombreuses opérations de dessin dans la zone cliente de sa fenêtre doit utiliser un contrôleur de domaine d’affichage privé. Pour créer ce type de contrôleur de domaine, l’application doit spécifier la constante CS_OWNDC pour le membre de style de la structure WNDCLASS lors de l’inscription de la classe window. Après avoir inscrit la classe window, l’application obtient un handle identifiant un contrôleur de domaine d’affichage privé en appelant la fonction GetDC .
L’exemple suivant montre comment créer un contrôleur de domaine d’affichage privé.
#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;
}