mfc mdi 예제

August 2, 2019  |  No Comments  |  by admin  |  Uncategorized

이 예제에서는 CMyMDIApp::GetAllDocuments를 호출하여 열려 있는 모든 문서 목록을 받은 다음 문서 제목으로 콤보박스 컨트롤을 채웁니다. 또한 추가 사용을 위해 각 항목 데이터에 문서 포인터를 유지합니다(예: 응용 프로그램은 사용자 요청에 따라 선택한 문서를 활성화할 수 있음). 다음 단계와 코드는 CStudent 클래스에 대한 것입니다. 이전 모듈의 프로젝트 예제와 유사하며 프로젝트 new Student.h 및 Student.cpp 파일에 추가하고 코드를 붙여 넣습니다. 그런 다음 몇 가지 코드 수정을 수행합니다. 창 이 아이들 중 하나가 아닌 경우 핸들을 활성 자식 창으로 받고 처리를 위해 메시지를 전달합니다. 이렇게 하면 특정 작업을 수행하기 위한 자식 창에 책임을 위임할 수 있으며 원하는 경우 다른 자식 창에서 다른 방식으로 명령을 처리할 수 있습니다. 예제에서는 프레임 창 프로시저의 프로그램에 전역적인 명령만 처리하고 프로세스를 위해 특정 문서 또는 자식 창에 영향을 주는 명령을 자식 창 자체로 보냅니다. 이 모듈의 예인 MYMFC18은 MYMFC17의 MDI 버전입니다. MYMFC17 예제를 실행하여 사용자가 파일을 선택한 후 SDI 버전의 그림을 볼 수 있습니다. 이제 그림 1과 같이 MDI 등가물을 살펴봅니다. SDI 예제에는 프레임 창 클래스가 하나만 있고 프레임 창 개체는 하나만 있었습니다.

SDI 응용 프로그램의 경우 AppWizard는 CFrameWnd 클래스에서 파생된 CMainFrame이라는 클래스를 생성했습니다. MDI 응용 프로그램에는 아래 표와 같이 두 개의 프레임 창 클래스와 많은 프레임 개체가 있습니다. MDI 프레임 뷰 창 관계는 그림 4에 나와 있습니다. 식 단일 문서 인터페이스 또는 SDI는 사용자에게 하나의 보기만 표시할 수 있는 문서를 나타냅니다. 즉, 응용 프로그램이 한 번에 두 개 이상의 문서를 표시할 수 없습니다. 현재 응용 프로그램의 다른 유형의 문서를 보려면 응용 프로그램의 다른 인스턴스를 만들어야 합니다. 메모장과 워드 패드는 SDI 응용 프로그램의 예입니다. 목록 9는 MYMFC17 및 MYMFC16 프로그램 예제와 유사한 CMymfc18View 클래스에 대한 코드를 보여 주다.

파일 열기 및 저장을 명령으로 구현했습니다. 각 뷰는 하나의 문서와 하나의 프레임 창에만 연결할 수 있습니다. CMDIFrameWnd 창에는 CMDIChildWnd 창이 0개 이상이며 각 CFrameWnd 또는 CMDIChildWnd에는 하나의 CView 창이 포함됩니다. 그러나 각 문서에는 두 개 이상의 뷰가 연관될 수 있습니다. 일반적인 예로는 분할창의 경우 분할을 통해 동일한 문서의 두 개의 서로 다른 뷰를 표시할 수 있습니다. ccs.idFirstChild는 클라이언트가 창 메뉴에 추가하는 항목의 첫 번째 ID로 사용할 수 있는 숫자입니다… 메뉴 명령을 처리하고 처리를 위해 창 메뉴 명령을 DefFrameProc()로 전달할 수 있도록 이 것을 자체 메뉴 식별자와 쉽게 구분할 수 있기를 원합니다. 예제에서는 50000으로 정의된 식별자를 지정하여 메뉴 명령 ID중 어느 것도 그 위에 있지 않다는 것을 알 수 있을 만큼 높습니다. 마지막 예제에서 빌드하기 때문에 MDI 클라이언트의 크기를 조정하는 코드는 마지막 예제에서 편집 컨트롤의 크기를 조정하는 코드와 동일하며, 이는 도구 및 상태 표시줄의 크기와 위치를 고려하여 MDI 클라이언트 창과 겹치지 않도록 합니다. 실제로 문서를 표시하는 창이나 프로그램이 표시하는 창의 경우 MDI 클라이언트에 메시지를 보내 지정한 형식의 새 창을 만들도록 지시합니다. 새 창은 프레임 창이 아닌 MDI 클라이언트의 자식으로 만들어집니다.

이 새 창은 MDI 자식입니다. MDI 차일드는 MDI 클라이언트의 자식이며, MDI 프레임의 자식입니다 (아직 어지러워짐?). 설상가상으로 MDI Child에는 이 섹션의 예제 프로그램에서 편집 컨트롤과 같은 자체 자식 창이 있을 수 있습니다.

Posted in Uncategorized. Bookmark the permalink.

Comments are closed.