|
김덕영 님이 쓰신 글 :
: 안녕하세요.
: 폼에서 어느 부분만을 지우고 다시 그리고 싶은데요..
:
: (InvalidateRect 함수를 썼으면 했는데 잘 안되네요. 클래스내에 그런 함수도 없고...
: 음... 어떻게 해야 되는지요.. InvalidateRect(hWnd, &rect, true); 이건 이상하게 안되더라고요)
:
: 아님..다른 방법이 또있는지..
:
: 간단히 말씀드려서 InvalidateRect 와 같은 함수를 썼으면 하는데 어떻게 해야 되는지 몰라서요.
:
: 그럼 즐거운 시간 되세요^^
임펠리테리입니다.
InvalidateRect() 는 API 함수입니다. 다시 그려주는 역할을 하는 것이 아니라, 단순히 지정한 영역을 '무효화'시켜주는게 그 역할의 모두죠. 무효화된 영역만 다시 그릴지 혹은 전체를 다시 그릴지를 실제로 결정하는 것은 WM_PAINT 메시지의 처리루틴입니다.
원래 WM_PAINT 메시지를 처리할 때는 GetUpdateRect() API 함수를 써서 무효화된 영역, 즉 다시 그릴 사각형 영역을 얻어와서 그 부분만 그리는 것이 원칙입니다. 물론 전체를 아예 새로 그리는 것은 코딩하는 사람의 맘이죠. 이 GetUpdateRect() 함수를 호출하면 앞의 InvalidateRect()를 사용해서 넘겨준 사각형 영역이 넘어옵니다.
아마도 폼이나 페인트박스 등의 OnPaint 이벤트 핸들러에서 직접 어떤 모양을 그려주려고 하시나보죠? C++Builder의 VCL에는 이러한 조금 복잡한 api 식의 처리를 단순화시켜주는 방법이 준비되어 있습니다. TCanvas의 ClipRect 프로퍼티에 실제로 다시 그려줘야 할 사각형 영역이 넘어오므로 이 영역만 그려주면 되죠.
그럼 참고하시길...
|