본문 바로가기

컴퓨터/MFC

InvalidateRect(NULL) 이게 뭥미

InvalidateRect()는 윈도우의 클라이언트 영역 중에서 일부분을 무효화 시키는 것입니다.
이때, 첫번째 인자는 어떤 윈도우인지를 가리키는 윈도우 핸들이고,
두번째 인자는 무효과시킬 사각 영역 좌표입니다. 이게 NULL이면 클라이언트 영역 전체라는 것이구요.
그리고 세번째 인자는 그 무효화 영역이 지워지고 다시 그려져야 하는지를 설정합니다. 만약 TRUE이면, 그 윈도우에게는 WM_ERASEBKGND 메시지가 한번 날려지고, WM_PAINT 메시지가 날라갑니다. 만약 FALSE이면 WM_PAINT 메시지만 날라갑니다.

위의 답변에 보시면 InvalidateRect()가 WM_PAINT 메시지를 발생시키지 않는다고 했는데요, WM_PAINT 메시지를 발생 시킵니다.

그리고 UpdateWindow()의 역할은 WM_PAINT 메시지를 발생시키는것이며, 이때 윈도우가 무효화 영역이 있어야 합니다.
즉, 다시 그려져야할 필요가 있는 영역이 있다면 다시 그리도록 만드는 것입니다.

정리하면, InvalidateRect()는 특정 영역을 무조건 다시 그리도록 만드는 함수이며, UpdateWindow()는 현재 윈도우에서 다시 그릴 필요가 있는 영역이 있는지 확인하고 있다면 다시 그리도록 하는 함수입니다.

사실상 위의 코드에서 UpdateWindow()는 필요 없습니다.