Monday, February 27, 2006

MFC 개체(Doc, View, Frame)간의 관계

문서/뷰를 만드는 프로세스를 제대로 이해하려면 문서, 뷰를 포함할 때 사용하는 프레임 창, 문서와 연결된 뷰 등과 같은 프로그램을 실행해 봅니다.
문서는 해당 문서의 뷰 목록 및 이 문서를 만든 문서 템플릿에 대한 포인터를 보관합니다.
뷰는 해당 문서에 대한 포인터를 보관하며 부모 프레임 창의 자식 창입니다.
문서 프레임 창은 현재 활성화된 뷰에 대한 포인터를 보관합니다.
문서 템플릿은 열린 문서 목록을 보관합니다.
응용 프로그램은 문서 템플릿의 목록을 보관합니다.
Windows에서는 열려 있는 모든 창을 계속 추적하므로 해당 창에 메시지를 보낼 수 있습니다. 이러한 관계는 문서/뷰를 만드는 동안 형성됩니다. 다음 표에서는 실행 중인 프로그램에서 개체가 다른 개체에 액세스하는 방법을 보여 줍니다. 모든 개체는 전역 함수 AfxGetApp를 호출하여 응용 프로그램 개체에 대한 포인터를 얻을 수 있습니다.응용 프로그램에서 다른 개체에 액세스하는 방법
개체
다른 개체에 액세스하는 방법
문서
GetFirstViewPosition 및 GetNextView를 사용하여 문서의 뷰 목록에 액세스합니다. GetDocTemplate를 호출하여 문서 템플릿에 액세스합니다.
보기
GetDocument를 호출하여 해당 문서에 액세스합니다. GetParentFrame을 호출하여 해당 프레임 창에 액세스합니다.
문서 프레임 창
GetActiveView를 호출하여 현재 뷰에 액세스합니다. GetActiveDocument를 호출하여 현재 뷰에 연결된 문서에 액세스합니다.
MDI 프레임 창
MDIGetActive를 호출하여 현재 활성화된 CMDIChildWnd에 액세스합니다.일반적으로 프레임 창에는 하나의 뷰가 있지만, 분할 창과 같은 경우에는 같은 프레임 창에 여러 개의 뷰가 포함되기도 합니다. 프레임 창은 현재 활성화된 뷰에 대한 포인터를 보관하며, 이 포인터는 다른 뷰가 활성화될 때마다 새로 업데이트됩니다.
참고 주 프레임 창에 대한 포인터는 해당 응용 프로그램 개체의 m_pMainWnd 멤버 변수에 저장됩니다. CWinApp의 InitInstance 멤버 함수 재정의에서 OnFileNew를 호출하면 m_pMainWnd가 설정됩니다. OnFileNew를 호출하지 않으면 InitInstance에서 변수 값을 직접 설정해야 합니다. 명령줄에 /Embedding이 있으면 SDI COM 구성 요소(서버) 응용 프로그램에서 변수를 설정하지 않을 수도 있습니다. 이제 m_pMainWnd는 CWinApp가 아닌 CWinThread 클래스의 멤버입니다.

No comments :