프라이빗 디스플레이 디바이스 컨텍스트 가져오기
창의 클라이언트 영역에서 수많은 그리기 작업을 수행하는 애플리케이션은 프라이빗 디스플레이 DC를 사용해야 합니다. 이 유형의 DC를 만들려면 애플리케이션은 창 클래스를 등록할 때 WNDCLASS 구조체의 스타일 멤버에 대한 CS_OWNDC 상수를 지정해야 합니다. 창 클래스를 등록한 후 애플리케이션은 GetDC 함수를 호출하여 프라이빗 디스플레이 DC를 식별하는 핸들을 가져옵니다.
다음 예제에서는 프라이빗 디스플레이 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;
}