UpdateWindow() 함수는 윈도우에 WM_PAINT 메세지를 전송함으로써 무효화된 영역을 다시 그려주는 함수이다. 이와 비슷하게 InvalidateRect()라는 함수가 있는데, 이 함수는 Rect를 통해 특정 영역을 지정하여 그 영역을 무효화된 영역으로 만들어주고 WM_PAINT 메세지를 발생시킨다.
두 함수의 차이 점은 InvalidateRect() 함수는 단순히 무효화 영역을 지정함으로써 시스템이 WM_PAINT 메세지를 발생시키도록 하는 것이고, UpdateWindow() 함수는 WM_PAINT 메세지를 강제로 발생시킨다. 원래 무효화 영역이 발생함으로써 생기는 WM_PAINT 메세지는 메세지 큐로 들어가며 다른 메세지들이 처리된 후 처리된다. 즉 우선순위가 낮다. 반면 UpdateWindow() 함수에 의해 발생된 WM_PAINT 메세지는 큐를 거치지 않고 곧바로 윈도우에게 전달된다. 즉 메세지큐를 거치지 않고 WndProc으로 바로 전달한다.
InvalidateRect() 함수의 주목적은 무효 영역을 지정하는 것이며, UpdateWindow() 함수의 주목적은 빠르게 무효화 영역을 갱신하는 것이다. UpdateWindow() 함수는 무효한 영역이 존재하지 않으면 WM_PAINT 메세지를 발생시키지 않으므로, InvalidateRect() 함수를 호출하여 무효화 영역을 지정하고 UpdateWindow() 함수를 통해 곧바로 갱신해줄 수 있다.
더 자세한 내용
http://www.tipssoft.com/bulletin/board.php?bo_table=FAQ&wr_id=633
'게임 공부 > Windows API' 카테고리의 다른 글
[WinAPI] 윈도우즈 프로그램에서 특정 값 확인하고 싶을 때 (0) | 2020.09.09 |
---|---|
[WinAPI] 윈도우 크기 고정시키기, 리사이즈 막기 (0) | 2020.09.07 |
GetMessage()와 PeekMessage()의 차이 (0) | 2020.06.22 |
HINSTANCE 타입과 HWND 타입의 차이 (0) | 2020.06.12 |
윈도우의 메시지 처리 과정 (0) | 2020.04.02 |
댓글