OnCreate() ,OnInitialUpdate() 비교

MFC 2019. 3. 22. 09:13 Posted by 쫀다

OnCreate() 함수는 WM_CREATE 메시지에 대한 핸들러 함수입니다.

즉, 어떤 윈도우 클래스가 윈도우로써 생성이 되면,

시스템이 그 윈도우에게 "너 이제 윈도우가 됐어"라는 의미로 WM_CREATE를 날려줍니다.

그러면 OnCreate()가 실행되면서 윈도우가 되면 할 수 있는 것들을 하게 되죠.

 

반면 OnInitialUpdate()라는 것은 가상함수입니다.

즉, 메시지에 대한 처리 함수가 아니라는 것입니다.

뷰 클래스의 내부로 들어가보면, OnInitialUpdate() 함수는 뷰가 윈도우로 생성된 후 도큐먼트에 의해 호출되게 됩니다.

 

SDI나 MDI같은 프레임워크의 경우는 도큐먼트, 뷰, 프레임이 한꺼번에 생성되고 연관되어 동작하기 때문에, 서로가 서로의 상태변화에 대해 알아야 합니다.

그래서 도큐먼트가 "자. 나 준비 됐으니깐 내 데이터를 가지고 너도 초기화해"라고 말해주게 되는데요, 이것이 OnInitialUpdate()입니다.

 

이 두 함수의 차이점을 보면,

WM_CREATE 메시지는 시스템이 윈도우로써의 생성을 알려주는 것이고,

OnInitialUpdate()는 도큐먼트가 뷰에게 초기화 기회를 주는 것입니다.

 

물론 뷰도 WM_CREATE 메시지를 받았을 때 어떤 동작을 할 수 있습니다.

타이머도 돌릴 수 있죠.

하지만 뷰는 도큐먼트와 프레임과 함께 동작해야 하기 때문에,

스스로 윈도우가 됐다는 것은 중요하지 않고,

도큐먼트가 준비가 되었는지가 중요한 것이죠.

그래서 뷰에 대해서는 OnInitialUpdate()에서 초기화를 진행하는 것입니다.

 

출처 : 네이버 지식IN



'MFC' 카테고리의 다른 글

ON_COMMAND_RANGE 매크로  (0) 2019.03.31
툴박스에 텍스트 삽입  (0) 2019.03.30
디버깅에 도움을 주는 assert 매크로에 대하여  (0) 2019.03.20
비트맵 처리  (0) 2019.03.19
CDC 클래스  (0) 2019.03.18