일단 CMultiDocTemplate 클래스의 포인터형으로 m_pImageDocTemplate 변수를 추가하였으면, CImageToolApp 클래스의 생성자에서 이를 NULL로 초기화를 해주어야 한다. 그리고 InitInstance 함수에서 pDocTemplate이라는 이름의 지역 변수를 사용하던 부분을 모두 m_pImageDocTemplate 멤버 변수를 사용하는 형태로 변형하자. 소스 7-8에서 강조된 부분을 주의하여 살펴보기 바란다.
이제 도큐먼트 템플릿을 얻기 위해서는 AfxGetApp 전역 함수를 사용하거나 theApp 전역 변수를 사용하여 CImageToolApp 클래스에 접근한 후, m_pImageDocTemplate 변수를 사용하면 된다.
이제 간단하게 CImageToolApp 클래스의 도큐먼트 템플릿에 접근할 수 있게 되었다. 도큐먼트 템플릿에는 현재 화면에 떠있는 도큐먼트가 연결 리스트의 형태로 이어져 있다. 그러므로 CDocTemplate 클래스의 멤버 함수인 GetFirstDocPosition과 GetNextDoc 함수를 조합하여 현재 화면에 떠 있는 도큐먼트에 접근할 수 있다. 아래 소스 코드를 살펴보자.
CImageToolApp* pApp = (CImageToolApp*)AfxGetApp(); CImageToolDoc* pDoc = NULL; POSITION pos = pApp->m_pImageDocTemplate->GetFirstDocPosition(); while (pos != NULL) { pDoc = (CImageToolDoc*)pApp->m_pImageDocTemplate->GetNextDoc(pos); // pDoc을 이용하여 도큐먼트에 접근!!! }
위 코드에서 POSITION이라는 타입은 MFC에서 연결 리스트의 위치(주소)를 기억하기 위해 사용되는 타입이다. while 루프는 현재 화면에 떠 있는 모든 창들의 도큐먼트를 검색한 후에 종료된다. 위 코드의 형태를 잘 기억해두기를 바란다. 이 코드는 다음에 설명할 산술 및 논리 연산 대화 상자의 초기화 담당 함수인 OnInitDialog에서 사용될 것이다.