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[데스크톱 앱만]
헤더
Winuser.h(Windows.h 포함)

추가 정보

그리기 및 그리기 개요

메시지 그리기 및 그리기

BeginPaint

DefWindowProc

DispatchMessage

EndPaint

GetMessage

GetUpdateRect

PeekMessage

RedrawWindow

UpdateWindow

WM_ERASEBKGND

WM_NCPAINT

WM_PRINT

WM_PRINTCLIENT