본문 바로가기

Programming/API

무효화 영역과 InvalidateRect 함수

WM_CHAR 메시지나 WM_KEYDOWN 메시지가 발생하여 문자나 키가 입력되고 나서 InvalidateRect 함수를 호출하여서 WM_PAINT메시지를 발생시켜 새로 윈도우를 불러왔었다.

그 것은 무효화 영역 때문인데 무효화 영역은 현재 표시 되어야 될 부분이 누락된 상태로 다른 모습을 하고 있는 것을 말 한다.

쉽게 말해 두개의 윈도우가 겹쳐있다가 이동하였을때 뒤에 가려져 있어 보이지 않던 부분이 바로 무효화 영역인 것이다.

그래서 InvalidateRect 함수를 이용하여 WM_PAINT메시지를 해당 윈도우에 보내 새롭게 윈도우를 그려 무효화 영역을 유효화 시키는 것이다.


BOOL InvalidateRect(HWND hWnd, CONST RECT *lpRect, BOOL bErase);

InvalidateRect함수의 원형이다.


여기서 첫번째 인자인 hWnd는 무효화 할 윈도우, 다시 그려야할 윈도우의 핸들을 가리킨다.


두번째 인자 IpRect는 무효화 할 영역을 지정하며, 그 값이 NULL로 되어 있는 경우에는 윈도우 전체를 무효화 한다.

윈도우 전체를 무효화 할 경우에는 편하긴 하겠지만, 당연히 그만큼 실행속도가 느려진다. 그렇기 때문에 무효화 해야하는 영역만 지정해 주는 것이 좋다.


세번째 인자 bErase는 무효화 되기 전 배경을 모두 지울 것인지 놔두고 그릴것인지 지정하는 값이다.

TRUE일 경우 배경을 지우고 다시 그리고, FALSE일 경우 배경을 놔두고 다시 그린다.

http://www.soen.kr/lecture/win32api/lec4/lec4-1-3.htm

이 강좌의 예제에서 InvalidateRect함수의 세번째 인자를 변경 해보면 이해가 될 것이다.

'Programming > API' 카테고리의 다른 글

tchar 매핑테이블  (0) 2013.08.13
마우스의 입력  (0) 2013.08.13
WM_CHAR 메시지와 WM_KEYDOWN 메시지  (0) 2013.08.08
가상키코드  (0) 2013.08.08
IME를 사용해서 한글입력기를 만들잣!  (0) 2013.08.06