MFC프로젝트 메모장 프로그램의 작성(MDI방식)-MDI프로젝트는?-MDI프로젝트 작성 메시지 처리기 추가-메모장 기능 코드의 작성, 선행하는 내용 제어 생성과 메시지 처리:https://blog.naver.com/hj_kim97/222692790669SDI기본 사용법:https://blog.naver.com/hj_kim97/222691801025
MDI프로젝트는?SDI어플리케이션은 한번에 1개 Document만을 편집할 수 있는 반면 동시에 복수의 Document를 열고 편집할 수 있는 기능을 제공하는 애플리케이션의 인터페이스를 MDI(Multiple Document Interface)라고 합니다.MDI어플리케이션은 1종류의 Document객체를 복수 생성하고 복수의 View창을 통해서 각각의 Document데이터를 편집할 수 있게 하는 것이 일반적이지만, 각각 다른 종류의 Document를 동시에 놓고 편집할 수 있도록 하는 것도 있습니다.복수의 문서를 제공하는 애플리케이션의 인터페이스·1개의 문서 객체를 복수 생성하고 여러 뷰 창을 통해서 편집 가능한 MDI프로젝트를 작성한다 1. Visual Studio실행>파일>새로 작성>프로젝트 클릭
2. MFC 앱 > 다음 클릭
3. 프로젝트명입력 >작성 클릭
4. 프로젝트 스타일을 MFC standard로 변경하고 다음 클릭
5. 파일 확장명, 메인프레임 캡션 설정 후 다음, 설정하지 않아도 상관없다X
6. 커맨드 바를 클래식 메뉴 사용으로 변경·통상의 디폴트가 클래식 메뉴 사용으로 되어 있다.
7. 다음 클릭 인쇄, ActiveX 컨트롤은 사용하지 않고 체크 해제해도 무방하다.
8. 생성된 클래스를 View로 변경한 후 마침 클릭
9. 솔루션 탐색기에서 생성된 프로젝트 확인
사용 클래스 MFC클래스 생성된 파일 이름 CMemoAppCWinApp응용 프로그램 클래스 Memo.h, Memo.cppCMainFrameCMDIFrameWnd응용 프로그램의 메인 프레임을 담당 MainFrm.h, MainFrm.cppCChildFrameCMDIChildWnd차일드 프레임을 담당 ChildFrm.h, ChildFrm.cppCMemoViewCView응용 프로그램의 데이터를 표시하는 역할 MemoView.h, MemoView CMDICH, 관리 프로그램의 데이터를 관리하는
사용 클래스 MFC 클래스 생성된 파일명 CMemoApp CWinApp 응용 프로그램 클래스 Memo.h, Memo.cpp CMAIN Frame CMDI Frame Wnd 응용 프로그램의 메인 프레임을 담당 Main Frm.cpp CChild Frame CMDIChild Wnd 차일드 프레임을 담당 ChildFrm.h, ChildFrm.cpp CMemoView 응용 프로그램의 데이터를 표시하는 역할 MemoViewCMDICH, 관리 프로그램의 데이터를 관리한다.
10. F5를 눌러 프로젝트를 실행
메시지 프로세서 추가 1. CEdit 컨트롤 추가 · MemoDoc.h 파일 수정 : CEDit 객체 생성 ※일반 View에 컨트롤을 추가하지만 Windows에 메모장을 가져오거나 저장하기 위해 파일 및 데이터를 관리하는 Doc 클래스에 생성 · Windows에 쓰기 기능을 사용하기 위해 CEDit 컨트롤을 추가하다2. 메시지 추가·MemoView클래스 메시지 추가·클래스 뷰>CMemoView클릭>속성(메시지)클립>행사 클릭 후 Add버튼을 누르고 추가한다, 상기와 같은 방법으로 OnCreate, OnSize함수를 추가합니다.※OnSize:창의 크기를 변경되었을 때 실행되는 함수, OnCreate:생성된 오브젝트를 유효하게 할 때 사용합니다앞 이미지 다음 이미지앞 이미지 다음 이미지MemoView.cpp에 추가된 내용입니다.3. 메시지 재정의 MemoView 클래스 메시지 재정의 클래스 뷰 > CMemoView 클릭 > 속성(재정의) 클릭 > 이벤트 클릭 후 Add 버튼을 눌러 추가하기 ※ ᆫ一ᄂ는 MemoView의 기본 클래스인 CView가 가지고 있는 함수로 재정의 항목에 존재합니다.※ 메모장 작성 후 종료 버튼 클릭 시 저장 여부에 대한 경고창을 열 때 사용MemoView.cpp에 추가된 내용4. 편집 메뉴 이벤트 추가 메모장 프로그램의 편집 메뉴에는 “카피”,”바탕”,”살인”,”취소”의 4항목이 있습니다.편집 컨트롤은 이 항목과 관련된 함수를 제공합니다.취소 항목과 연결된 CEdit멤버 함수는 Undo()이며, 살인은 Cut(), 카피는 Copy(), 바탕은 Paste()함수입니다.· MemoView 클래스 이벤트 추가 및 클래스 뷰 > CMemoView 클릭 > 속성(이벤트) 클릭 > 이벤트 클릭 후 Add 버튼을 눌러 추가하기 · 위와 같은 방법으로 OnEditCut, OnEditCopy, OnEditPaste, ONEditUndo 이벤트를 추가합니다.· MemoView 클래스 이벤트 추가 및 클래스 뷰 > CMemoView 클릭 > 속성(이벤트) 클릭 > 이벤트 클릭 후 Add 버튼을 눌러 추가하기 · 위와 같은 방법으로 OnEditCut, OnEditCopy, OnEditPaste, ONEditUndo 이벤트를 추가합니다.MemoView.cpp에 추가된 내용메모장 기능 코드 작성 기본적으로 프로젝트 작성 및 메모장 프로그램을 만들기 위한 메시지를 추가했습니다. 이제 CEDit 객체를 이용하여 메모장 기능을 정의하고 적은 내용을 파일에 저장하거나 가져오는 기능을 추가해야 합니다. · 텍스트를 작성하여 파일에 저장 또는 가져오기 텍스트 기능을 가진 CEDit 객체 생성 및 기능 정의 CEDit 클래스 제공 함수메소드 설명 SetWindowText창의 메인 텍스트를 변경합니다.GetWindowText창의 텍스트나 캡션 타이틀을 취득합니다.Update Data대화 상자에서 데이터를 초기화 또는 취득합니다.Create창을 생성시킵니다.ShowWindow창을 화면에 표시하거나 보이지 않도록 합니다.·SW_SHOW: 보이고, SW_HIDE: 숨김1. 파일 저장 및 가져오기 MemoDoc.cpp 파일 내용 변경 응용 프로그램에서 객체 유형을 파일로 저장하려면 나중에 파일에서 데이터를 가져와 객체를 완전히 복원할 수 있어야 합니다. MFC에서는 이러한 작업을 직렬화(Serialization)라는 개념을 통해 편리하게 처리할 수 있습니다. 직렬화란 객체의 정보를 연속적인 이진 데이터 흐름으로 변경하여 파일에 저장하는 것입니다. 즉, 직렬화된 객체는 객체의 정보가 0 또는 1 형태인 이진 데이터의 연속적인 흐름으로 변경되어 순서대로 파일에 기록됩니다. 반대로 직렬화된 객체의 정보를 파일에서 읽어들여 객체를 복원하는 것을 역직렬화(Deserialize)라고 합니다. · MFC에서는 직렬화를 사용하기 위해 Carchive 클래스가 제공됩니다. 또한 Doc 클래스에는 기본적으로 Serialize 함수가 제공되지만 파라미터로 Carchive 클래스를 변수로 받아들이고 있습니다.Void CMemoDoc;Serialize(CArchive&ar){String data;//텍스트 정보를 저장할 변수 if(ar.IsStoring(){//파일 저장_Edit.GetWindowText(데이터);//텍스트를 읽는 r<<data;//데이터를 직렬화 개체에 저장}else{//파일 읽기 r>>data;//데이터를 직렬화 개체에서 읽는다_Edit.SetWindowTextW(데이터);//텍스트를 창에 글}}2. 메모 기능을 가진 CEdit객체 생성 및 기능 정의·MemoView.cpp파일 내용 변경·OnCreate:CEdit객체 생성, Doc클래스에 존재하는 것으로 GetDocument()함수 포인터를 얻어 해당 포인터에 멤버 변수 이용·OnSize:창의 크기가 변경될 때 CEdit객체의 크기도 창의 크기에 맞추어 변경되도록 처리하고 SetWindowPos()함수 이용·종료 단추 클릭 시 저장하거나 메시지 박스 출력, SetModifyFlag()함수로 통보 창 출력 가능·CEc·OnEditPaste:바탕 기능 추가 CEdit클래스의 Paste()함수 이용·OnEditCopy:복사 기능 추가, CEdit클래스의 Copy()함수 이용·OnEditUndo:편집시 되돌리는 기능 추가, CEdit급 Undo()함수 이용작성 시온사이즈온 커맨드온 커맨드3. 결과 화면 확인 및 F5 를 눌러 작성한 프로그램을 실행합니다.텍스트 작성 후 저장 시파일을 여는 것으로 메모장을 열다출처 방송통신대학교, Visual C++ 프로그래밍, MDI 프로그래밍 메모장