TN025: 문서, 뷰 및 프레임 만들기

참고 항목

다음 기술 노트는 온라인 설명서에 먼저 포함되어 있었으므로 업데이트되지 않았습니다. 따라서 일부 절차 및 항목은 만료되거나 올바르지 않을 수 있습니다. 최신 정보를 보려면 온라인 설명서 색인에서 관심 있는 항목을 검색하는 것이 좋습니다.

이 노트에서는 WinApps, DocTemplates, 문서, 프레임 및 뷰의 생성 및 소유권 문제에 대해 설명합니다.

WinApp

시스템에는 하나의 CWinApp 개체가 있습니다.

이 개체는 프레임워크의 내부 WinMain 구현에 의해 정적으로 생성되고 초기화됩니다. 유용한 작업을 수행하려면 파생 CWinApp 해야 합니다(예외: MFC 확장 DLL에는 CWinApp 인스턴스가 없어야 합니다. 대신 초기화가 수행 DllMain 됨).

하나의 CWinApp 개체는 문서 템플릿 목록을 소유합니다(CPtrList). 애플리케이션당 하나 이상의 문서 템플릿이 있습니다. DocTemplates는 일반적으로 CWinApp::InitInstance에 있는 리소스 파일(즉, 문자열 배열)에서 로드됩니다.

pTemplate = new CDocTemplate(IDR_MYDOCUMENT, ...);

AddDocTemplate(pTemplate);

하나의 CWinApp 개체는 애플리케이션에서 모든 프레임 창을 소유합니다. 애플리케이션에 대한 기본 프레임 창은 저장CWinApp::m_pMainWnd되어야 합니다. 일반적으로 AppWizard가 이를 수행하도록 허용하지 않은 경우 구현에서 InitInstance m_pMainWnd 설정합니다. SDI(단일 문서 인터페이스)의 경우 기본 애플리케이션 프레임 창뿐만 아니라 유일한 문서 프레임 창으로 작동하는 하나의 CFrameWnd입니다. MDI(다중 문서 인터페이스)의 경우에는 모든 자식 CMDIFrameWnd를 포함하는 기본 애플리케이션 프레임 창으로 작동하는 MDI 프레임(CFrameWnd 클래스)입니다. 각 자식 창은 CMDIChildWnd(CFrameWnd에서 파생) 클래스에 속하며 잠재적으로 여러 문서 프레임 창 중 하나로 작동합니다.

DocTemplates

CDocTemplate는 문서의 생성자 및 관리자입니다. 이 템플릿은 생성되는 문서를 소유합니다. 애플리케이션에 아래에 설명된 리소스 기반 접근 방법이 사용될 경우 CDocTemplate에서 파생될 필요가 없습니다.

SDI 애플리케이션의 경우 CSingleDocTemplate 클래스는 하나의 열린 문서를 추적합니다. MDI 애플리케이션의 경우 CMultiDocTemplate 클래스는 해당 템플릿으로부터 생성된 모든 현재 열린 문서의 목록(CPtrList)을 유지합니다. CDocTemplate::AddDocumentCDocTemplate::RemoveDocument는 템플릿에서 문서를 추가 또는 제거하기 위한 가상 멤버 함수를 제공합니다. CDocTemplate 는 친구 CDocument 이므로 문서를 만든 문서 서식 파일을 다시 가리키도록 보호된 CDocument::m_pDocTemplate 뒤로 포인터를 설정할 수 있습니다.

CWinApp은 기본 OnFileOpen 구현을 처리하며, 이 구현은 다시 모든 doc 템플릿을 쿼리합니다. 이러한 구현에는 이미 열린 문서 조사 및 새 문서를 여는 데 사용할 형식 결정이 포함됩니다.

CDocTemplate은 문서 및 프레임에 대한 UI 바인딩을 관리합니다.

CDocTemplate은 명명되지 않은 문서의 개수를 유지합니다.

CDocument

A CDocument 는 .에 의해 CDocTemplate소유됩니다.

문서에는 해당 문서(CView)를 표시 중인 현재 열린 뷰 목록(CPtrList에서 파생)을 가집니다.

문서는 뷰를 생성/제거하지 않지만 생성된 후 서로 연결됩니다. 문서를 닫으면(파일/닫기 사용) 연결된 모든 뷰가 닫힙니다. 문서의 마지막 뷰가 닫히면(창/닫기) 문서가 닫힙니다.

CDocument::AddView, RemoveView 인터페이스는 뷰 목록을 유지 관리하는 데 사용됩니다. CDocument 는 친구 CView 이므로 뒤로 포인터를 CView::m_pDocument 설정할 수 있습니다.

CFrameWnd

CFrameWnd(프레임이라고도 부름)는 MFC 1.0에서 동일한 역할을 수행하지만 이제 CFrameWnd 클래스는 새 클래스를 파생하지 않는 여러 경우에 사용되도록 설계되었습니다. 파생된 클래스 CMDIFrameWndCMDIChildWnd도 향상되어 많은 표준 명령이 이미 구현되어 있습니다.

CFrameWnd는 프레임의 클라이언트 영역에서 창 만들기 작업을 수행합니다. 일반적으로 프레임의 클라이언트 영역을 채우는 하나의 기본 창이 있습니다.

MDI 프레임 창의 경우 클라이언트 영역은 모든 MDI 자식 프레임 창의 부모가 되는 MDICLIENT 컨트롤로 채워집니다. SDI 프레임 창 또는 MDI 자식 프레임 창의 경우에는 클라이언트 영역이 일반적으로 CView 파생 창 개체로 채워집니다. CSplitterWnd의 경우, 뷰의 클라이언트 영역은 CSplitterWnd 창 개체로 채워지며, CView 파생 창 개체(분할 창당 하나)는 CSplitterWnd의 자식 창으로 생성됩니다.

참고 항목

번호별 기술 참고 사항
범주별 기술 참고 사항