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 |