(2022) 공부 (Study)/게임 개발 (Development)

[Win32API] BeginPaint()와 무효화 영역의 관계

수낭 2022. 4. 13. 11:13

BeginPaint()는 메시지를 처리하는 WndProc()case WM_PAINT: 에서만 쓸 수 있는 전용 함수이다.
왜냐하면, BeginPaint()로 얻고, EndPaint()로 해제하는 이 과정에서 Window 창의 무효화 영역이 해제됐다고
알리는 역할이 있기 때문이다.

우리가 case WM_PAINT: 를 진입하는 주 원인 자체가, 무효화 영역이 발생하여서 이를 다시 그리기 위한 목적이었는데,
그렇기에 BeginPaint() ~ EndPaint() 과정에서 무효화 영역이었던 것을 해제시키는 역할이 들어있는 것이고, 
이를 WM_PAINT 케이스에서만 사용하여야만 하는 것이 된다.
(정확히는 EndPaint()로 해제하는 시점에서, 무효화 영역이 모두 사라졌다고 알림이 가게 되는 것이다.)

case WM_PAINT:
    {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hWnd, &ps);

        //Rectangle(hdc, 1180, 0, 1280, 100);

        EndPaint(hWnd, &ps);
    }
    break;

이와 대조적으로, 메시지가 쌓여있든 말든, 무효화 영역이 있든 말든 이와는 상관없이 단순히 그리는 것이 목적이라면,
GetDC() ~ ReleaseDC ()를 사용하면 된다.
(다음 글에서 다뤄보자)