WM_PAINT 메시지
시스템 또는 다른 애플리케이션이 애플리케이션 창의 일부를 그리도록 요청할 때 WM_PAINT 메시지가 전송됩니다. UpdateWindow 또는 RedrawWindow 함수가 호출될 때 또는 애플리케이션이 GetMessage 또는 PeekMessage 함수를 사용하여 WM_PAINT 메시지를 가져올 때 DispatchMessage 함수에 의해 메시지가 전송됩니다.
창은 WindowProc 함수를 통해 이 메시지를 받습니다.
LRESULT CALLBACK WindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
-
wParam
-
이 매개 변수는 사용되지 않습니다.
-
lParam
-
이 매개 변수는 사용되지 않습니다.
애플리케이션이 이 메시지를 처리하는 경우 0을 반환합니다.
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
// All painting occurs here, between BeginPaint and EndPaint.
FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));
EndPaint(hwnd, &ps);
}
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
GitHub의 Windows 클래식 샘플 예제입니다.
WM_PAINT 메시지는 시스템에서 생성되며 애플리케이션에서 전송해서는 안 됩니다. 창을 강제로 특정 디바이스 컨텍스트로 그리려면 WM_PRINT 또는 WM_PRINTCLIENT 메시지를 사용합니다. 이 경우 대상 창에서 WM_PRINTCLIENT 메시지를 지원해야 합니다. 대부분의 일반적인 컨트롤은 WM_PRINTCLIENT 메시지를 지원합니다.
DefWindowProc 함수는 업데이트 지역의 유효성을 검사합니다. 또한 함수는 창 프레임을 그려야 하는 경우 창 프로시저에 WM_NCPAINT 메시지를 보내고 창 배경을 지워야 하는 경우 WM_ERASEBKGND 메시지를 보낼 수도 있습니다.
애플리케이션의 메시지 큐에 다른 메시지가 없으면 시스템에서 이 메시지를 보냅니다. DispatchMessage 는 메시지를 보낼 위치를 결정합니다. GetMessage는 디스패치할 메시지를 결정합니다. GetMessage는 애플리케이션의 메시지 큐에 다른 메시지가 없으면 WM_PAINT 메시지를 반환하고 DispatchMessage 는 메시지를 적절한 창 프로시저로 보냅니다.
창은 RDW_INTERNALPAINT 플래그가 설정된 RedrawWindow 를 호출한 결과로 내부 페인트 메시지를 받을 수 있습니다. 이 경우 창에 업데이트 지역이 없을 수 있습니다. 애플리케이션은 GetUpdateRect 함수를 호출하여 창에 업데이트 지역이 있는지 여부를 확인할 수 있습니다. GetUpdateRect가 0을 반환하는 경우 애플리케이션은 BeginPaint 및 EndPaint 함수를 호출할 필요가 없습니다.
NULL이 아닌 업데이트 영역과 RDW_INTERNALPAINT 플래그가 설정된 RedrawWindow 호출로 인해 WM_PAINT 메시지가 발생했을 수 있으므로 애플리케이션은 각WM_PAINT 메시지에 대한 내부 데이터 구조를 확인하여 필요한 내부 그리기를 검사 합니다.
시스템은 내부 WM_PAINT 메시지를 한 번만 보냅니다. 내부 WM_PAINT 메시지가 GetMessage 또는 PeekMessage 에서 반환되거나 UpdateWindow에 의해 창으로 전송된 후 시스템은 창이 무효화되거나 RDW_INTERNALPAINT 플래그 집합을 사용하여 RedrawWindow 가 다시 호출될 때까지 WM_PAINT 메시지를 게시하거나 보내지 않습니다.
일부 일반적인 컨트롤의 경우 기본 WM_PAINT 메시지 처리는 wParam 매개 변수를 확인합니다. wParam이 NULL이 아닌 경우 컨트롤은 값이 HDC라고 가정하고 해당 디바이스 컨텍스트를 사용하여 그립니다.
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 |
Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 |
Windows 2000 Server[데스크톱 앱만] |
헤더 |
|