티스토리 뷰

Invalidate() 


이 함수는 CWnd에서 파생된 함수로써 View(CWnd에서 파생된 클래스에서) 클래스 안에서 실행이 가능하다. 


View클래스 안에있는 OnDraw() 함수는 WM_PAINT 메세지에 의해 호출되도록 만들어져 있다. 이러한 메세지를 사용자가 원하는 시점에 임의로 호출할 수 있게 해주는 방법중 하나가 Invalidate() 함수라고 할 수 있겠다.


이 함수는 호출한 클라이언트 윈도우의 화면을 무효화시킨다. 화면이 무효화되면 시스템은 WM_PAINT 메세지를 발생시킨다. 즉 원하는 윈도우의 화면을 강제로 갱신할 때 사용한다.


매개변수

bErase : BOOL 타입의 변수인데, 윈도우 화면을 갱신할때 이 변수를 통해서 두가지 메세지를 이용할 수 있다. 기본적으로 WM_PAINT 메세지를 발생시키며 더불어 WM_ERASEBKGND 메세지이다. WM_ERASEBKGND 메세지는 기존 윈도우 화면을 빈화면으로 지울때 사용된다. 따라서 OnDraw()를 호출하면서 화면을 지울것인지, 현재상태를 유지할 것인지를 이 변수를 통해서 결정할 수 있다.

default 값으로 TRUE를 갖고 있기 때문에 아무것도 전달하지 않는다면 화면을 먼저 지우고 WM_PAINT 메세지를 전달하도록 되어있다.


데이터를 처리함과 동시에 화면을 업데이트 해주는등의 기능으로 빈번하게 사용되는 함수이기 때문에 반드시 숙지하도록 하자.


InvalidateRect()


이 함수는 기존 Invalidate() 함수와 조금 차이가 있다. Invalidate()는 윈도우 화면 전체를 대상으로 무효화 시키지만 이 함수는 지정된 영역만 무효화 시킨다. 이후 사용법은 Invalidate()와 동일하며, 전체영역을 대상으로하면 Invalidate()와 같은 효과를 볼 수도 있다.


매개변수

lpRect  : 갱신할 영역. 이 변수가 NULL이면 윈도우 전체가 무효화된다.

bErase : Invalidate() 함수와 상동



UpdateAllViews()


그렇다면 View 클래스가 아닌 Document 클래스에서는 Invalidate() 함수를 어떻게 실행시킬수 있을까?


CWnd클래스에서 파생된것이 아닌 Document 클래스는 Invalidate()를 사용할 수는 없다.

하지만 Invalidate() 함수와 마찬가지로 클라이언트의 영역을 무효화 시키는 UpdateAllViews() 함수를 사용할 수 있다.


이 함수는 클라이언트가 무효화 되었음을 뷰에 알려 WM_PAINT메세지가 View 클래스에 전해지고 OnDraw() 시켜주는 역할을 한다.

기존의 Invalidate() 함수와 동일한 부분이고 Document 클래스에서 사용할 수 있다는점이 다르다.


앞선 포스팅에서도 설명했지만 MFC에서는 이와같이 같은 메세지를 만들어내지만 다른이름, 다른 매개변수를 갖는 경우가 많기때문에 각 클래스별 참조방법이 매우 중요하다고 할 수 있다. 

'C,C++' 카테고리의 다른 글

클래스와 메세지  (0) 2015.05.09
MFC 클래스간 관계  (0) 2015.05.09
Device Context의 개념(GetDC / ReleaseDC)  (0) 2015.05.09
MFC 클래스간 참조 방법  (1) 2015.05.09
객체[Object]와 인스턴스[Instance]  (0) 2015.05.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함