본문 바로가기
게임 공부/Windows API

UpdateWindow()와 InvalidateRect()와 WM_PAINT 메세지

by woohyeon 2020. 9. 6.
반응형

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

  




댓글