문서/뷰 아키텍처의 대체
MFC 애플리케이션은 일반적으로 문서/뷰 아키텍처를 사용하여 정보, 파일 형식 및 사용자 데이터의 시각적 표현을 관리합니다. 대부분의 데스크톱 애플리케이션에 대해 문서/뷰 아키텍처는 적절하고 효율적인 애플리케이션 아키텍처입니다. 이 아키텍처는 뷰에서 데이터를 구분하고, 대부분의 경우 애플리케이션을 단순화하고 코드 중복을 줄입니다.
그러나 문서/뷰 아키텍처는 일부 상황에 적절하지 않습니다. 이 예제를 참조하십시오.
Windows용 C로 작성된 애플리케이션을 이식하는 경우 애플리케이션에 문서/뷰 지원을 추가하기 전에 이식을 완료하는 것이 좋습니다.
간단한 유틸리티를 작성하는 경우 문서/뷰 아키텍처 없이 작성할 수 있음을 알 수 있습니다.
원본 코드가 이미 데이터 뷰와 데이터 관리를 혼합한 경우 두 가지를 구분해야 하므로 문서/뷰 모델에 코드를 이동할 필요가 없습니다. 코드를 현재 상태로 둘 수 있습니다.
문서/보기 아키텍처를 사용하지 않는 애플리케이션을 만들려면 MFC 애플리케이션 마법사의 1단계에서 문서/보기 아키텍처 지원 검사 확인란을 선택 취소합니다. 자세한 내용은 MFC 애플리케이션 마법사를 참조하세요.
참고 항목
MFC 애플리케이션 마법사에서 생성된 대화 상자 기반 애플리케이션은 문서/보기 아키텍처를 사용하지 않으므로 대화 상자 응용 프로그램 유형을 선택하면 문서/보기 아키텍처 지원 검사 상자가 비활성화됩니다.
Visual C++ 마법사와 소스 및 대화 상자 편집기는 다른 마법사에서 생성된 애플리케이션과 같이 생성된 애플리케이션으로 작업합니다. 애플리케이션은 도구 모음, 스크롤 막대 및 상태 막대를 지원할 수 있으며 정보 상자가 있습니다. 애플리케이션에는 문서 템플릿이 등록되지 않고 문서 클래스가 포함되지 않습니다.
생성된 애플리케이션에는 .에서 CWnd
파생된 뷰 클래스CChildView
가 있습니다. MFC는 애플리케이션에서 만든 프레임 창 내에서 뷰 클래스의 인스턴스 하나를 만들고 배치합니다. MFC에서 애플리케이션 콘텐츠의 배치 및 관리를 단순화하므로 MFC는 뷰 창의 사용을 강제로 적용합니다. 이 클래스의 OnPaint
멤버에 그리기 코드를 추가할 수 있습니다. 코드에서는 프레임 대신 뷰에 스크롤 막대를 추가해야 합니다.
MFC에서 제공하는 문서/뷰 아키텍처는 애플리케이션의 많은 기본 기능을 구현하므로 프로젝트에서 해당 아키텍처가 없는 경우에는 사용자가 애플리케이션의 많은 중요한 기능을 구현해야 한다는 의미입니다.
MFC 애플리케이션 마법사에서 제공하는 대로 애플리케이션 메뉴에는 파일 메뉴의 새로 만들기 및 종료 명령만 포함됩니다. (다음 항목새 명령은 문서/보기 지원이 없는 SDI 애플리케이션이 아닌 MDI 애플리케이션에 대해서만 지원됩니다.) 생성된 메뉴 리소스는 MRU(가장 최근에 사용한) 목록을 지원하지 않습니다.
파일 메뉴에서 열기 및 저장을 포함하여 애플리케이션에서 지원하는 모든 명령에 대한 처리기 함수 및 구현을 추가해야 합니다. MFC는 일반적으로 이러한 기능을 지원하는 코드를 제공하지만 해당 기능은 문서/뷰 아키텍처에 밀접하게 바인딩되어 있습니다.
애플리케이션의 도구 모음은 요청하는 경우 최소로 됩니다.
마법사가 올바른 MFC 아키텍처를 보장하므로 문서/뷰 아키텍처를 사용하지 않고 MFC 애플리케이션 마법사를 사용하여 애플리케이션을 만드는 것이 좋습니다. 그러나 마법사를 사용하지 않도록 해야 하는 경우 코드에서 문서/뷰 아키텍처를 우회하기 위한 몇 가지 방법은 다음과 같습니다.
문서를 사용하지 않는 부속물로 취급하고 위에서 제시한 대로 뷰 클래스에서 데이터 관리 코드를 구현합니다. 문서에 대한 오버헤드는 상대적으로 낮습니다. 단일 CDocument 개체는 그 자체로 약간의 오버헤드를 발생시키고 기본 클래스인 CCmdTarget 및 CObject의
CDocument
작은 오버헤드를 발생합니다. 후자의 클래스는 모두 작습니다.선언된 내용
CDocument
:두 개의
CString
개체입니다.세 BOOL s.
한 개의
CDocTemplate
포인터입니다.문서 보기 목록이 포함된 한 개의
CPtrList
개체입니다.
또한 문서에는 문서 개체를 만드는 시간, 해당 뷰 개체, 프레임 창 및 문서 템플릿 개체가 필요합니다.
문서와 뷰 모두 사용하지 않는 부속물로 취급합니다. 데이터 관리 및 그리기 코드를 뷰 대신 프레임 창에 넣습니다. 이 방법은 C 언어 프로그래밍 모델에 더 가깝습니다.
MFC 프레임워크의 문서 및 뷰 만들기를 완전히 제거하기 위해 문서 및 뷰 만들기 부분을 재정의합니다. 문서 작성 프로세스는
CWinApp::AddDocTemplate
을 호출하여 시작합니다. 애플리케이션 클래스의InitInstance
멤버 함수에서 호출을 제거하고 대신InitInstance
에서 직접 프레임 창을 만듭니다. 프레임 창 클래스에 데이터 관리 코드를 넣습니다. 문서/보기 만들기 프로세스는 문서/뷰 만들기에 설명되어 있습니다. 이 방법은 작업량이 많고 프레임워크에 대한 깊은 이해가 필요하지만 문서/뷰 오버헤드를 완전히 해제합니다.
문서 MFC: 문서 및 뷰 없이 데이터베이스 클래스를 사용하면 데이터베이스 애플리케이션의 컨텍스트에서 문서/뷰 대안에 대한 보다 구체적인 예제가 제공됩니다.