비고
다음 기술 정보는 온라인 설명서에 처음 포함되었으므로 업데이트되지 않았습니다. 따라서 일부 절차와 항목이 만료되거나 올바르지 않을 수 있습니다. 최신 정보는 온라인 설명서 인덱스의 관심 항목을 검색하는 것이 좋습니다.
이 참고에서는 WinApps, DocTemplates, 문서, 프레임 및 뷰에 대한 만들기 및 소유권 문제에 대해 설명합니다.
WinApp
시스템에 하나의 CWinApp 개체가 있습니다.
프레임워크의 내부 구현 WinMain에 의해 정적으로 생성되고 초기화됩니다. 유용한 작업을 수행하려면 CWinApp에서 파생해야 합니다(예외: MFC 확장 DLL은 CWinApp 인스턴스를 가질 수 없습니다. 대신, 초기화는 DllMain에서 수행됩니다).
한 CWinApp 개체는 문서 서식 파일(a CPtrList)의 목록을 소유합니다. 애플리케이션당 하나 이상의 문서 서식 파일이 있습니다. DocTemplates는 일반적으로 리소스 파일(즉, 문자열 배열)에서 로드됩니다 CWinApp::InitInstance.
pTemplate = new CDocTemplate(IDR_MYDOCUMENT, ...);
AddDocTemplate(pTemplate);
한 CWinApp 개체는 애플리케이션의 모든 프레임 창을 소유합니다. 애플리케이션의 기본 프레임 창은 CWinApp::m_pMainWnd에 저장되어야 합니다. 일반적으로 AppWizard가 자동으로 설정하도록 하지 않은 경우, 구현에서 InitInstance을 설정해야 합니다. SDI(단일 문서 인터페이스)의 경우 주 애플리케이션 프레임 창과 유일한 문서 프레임 창 역할을 하는 인터페이스입니다 CFrameWnd . MDI(여러 문서 인터페이스)의 경우 모든 자식CMDIFrameWnd이 포함된 기본 애플리케이션 프레임 창 역할을 하는 MDI-Frame(클래스CFrameWnd)입니다. 각 자식 창은 클래스 CMDIChildWnd (파생 CFrameWnd)이며 잠재적으로 많은 문서 프레임 창 중 하나로 사용됩니다.
문서 템플릿
CDocTemplate 문서의 작성자 및 관리자입니다. 만든 문서를 소유합니다. 애플리케이션이 아래에 설명된 리소스 기반 접근 방식을 사용하는 경우 CDocTemplate에서 파생될 필요가 없습니다.
SDI 애플리케이션의 경우 클래스 CSingleDocTemplate 는 열려 있는 문서 하나를 추적합니다. MDI 애플리케이션의 경우 클래스 CMultiDocTemplate 는 해당 템플릿에서 만든 현재 열려 있는 모든 문서의 목록(a CPtrList)을 유지합니다.
CDocTemplate::AddDocument 템플릿 CDocTemplate::RemoveDocument 에서 문서를 추가하거나 제거하기 위한 가상 멤버 함수를 제공합니다.
CDocTemplate는 CDocument의 친구이기 때문에, 보호된 CDocument::m_pDocTemplate 뒤로 포인터를 문서를 만든 문서 서식 파일을 다시 가리키도록 설정할 수 있습니다.
CWinApp 는 모든 문서 템플릿을 쿼리하는 기본 OnFileOpen 구현을 처리합니다. 구현에는 이미 열려 있는 문서를 찾고 새 문서를 열 형식을 결정하는 것이 포함됩니다.
CDocTemplate 는 문서 및 프레임에 대한 UI 바인딩을 관리합니다.
CDocTemplate 는 명명되지 않은 문서 수를 유지합니다.
CDocument
CDocument는 CDocTemplate에 의해 소유됩니다.
문서에는 문서를 보고 있는 현재 열려 있는 보기(파생 CView)의 목록이 있습니다(a CPtrList).
문서는 뷰를 만들거나 삭제하지 않지만 만든 후 서로 연결됩니다. 문서가 닫히면(즉, 파일/닫기를 통해) 연결된 모든 보기가 닫힙니다. 문서의 마지막 보기가 닫히면(즉, 창/닫기) 문서가 닫힙니다.
CDocument::AddView- RemoveView 인터페이스를 사용하여 보기 목록을 유지 관리합니다.
CDocument는 CView의 친구이므로, CView::m_pDocument 뒤의 포인터를 설정할 수 있습니다.
CFrameWnd
A CFrameWnd (프레임이라고도 함)는 MFC 1.0에서와 동일한 역할을 하지만 이제 CFrameWnd 클래스는 새 클래스를 파생하지 않고 많은 경우에 사용하도록 설계되었습니다. 파생 클래스도 CMDIFrameWndCMDIChildWnd 향상되어 많은 표준 명령이 이미 구현되어 있습니다.
프레임 CFrameWnd 의 클라이언트 영역에서 창을 만드는 역할을 담당합니다. 일반적으로 프레임의 클라이언트 영역을 채우는 하나의 주 창이 있습니다.
MDI-Frame 창의 경우 클라이언트 영역은 모든 MDI-Child 프레임 창의 부모인 MDICLIENT 컨트롤로 채워집니다. SDI-Frame 창 또는 MDI-Child 프레임 창의 경우 클라이언트 영역은 일반적으로 파생된 창 개체로 CView채워집니다. 이 경우, CSplitterWnd의 클라이언트 영역은 CSplitterWnd 창 개체로 채워지며, CView에서 파생된 창 개체(분할 창당 하나)는 CSplitterWnd의 자식 창으로 생성됩니다.
참고하십시오
숫자로 된 기술 노트
범주별 기술 정보