직렬화 도큐먼트 클래스는 COnject 를 상속받고 있어 도큐먼트 클래스의 멤버 변수의 값을 파일에 저장하고 불러올 수 있다. 각 멤버의 값이 변경되었으면 도큐먼트 클래스의 SetModifyFlag() 멤버 함수를 호출하면 되고, 이것은 변경된 데이터를 저장하지 않고 프로그램을 종료할때 저장할 것인지 물어보게 해준다. 기본 SDI 프로젝트는 파일에 저장할 값을 저장 메뉴를 클릭하면 지정한 파일로 데이터를 저장할 수 있으므로 Serialize() 멤머 함수에서 저장할 변수를 지정하면된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 void CTestSerializeDoc::Serialize(CArchive& ar) { // m_ElementList.Serialize(ar); if (ar.I..
메시지 처리 순서 (라우팅) 모든 명령메시지들은 응응 프로그램 프레임 윈도우에 전달된다. 메인 프레임 윈도우는 그 이후에 프로그램에 있는 클래스들에 아래 순서로 메시지 라우팅하며, 메시지를 처리하려고 시도한다. 만일, 한 클래스가 메시지를 처리할 수 없다면, 다음 클래스로 전달한다. A. SDI 1. 뷰 객체 2. 도큐먼트 객체 3. 도큐먼트 템플릿 객체 4. 메인 프레임 윈도우 객체 5. 응용 프로그램 객체 B. MDI 1. 활성 뷰 객체 2. 활성 뷰와 연결된 도큐먼트 객체 3. 활성 도큐먼트에 대한 도큐먼트 템플릿 객체 4, 활성 뷰에 대한 프레임 윈도우 객체 5. 메인 프레임 윈도우 객체 6. 응용 프로그램 객체 메시지 라팅 순서를 변경할 수도 있지만 그럴 경우는 드물다.
MFC 메뉴2 메뉴관련 리소스 파일은 '프로젝트명.rc' 이다. 프로젝트 솔루션 탐색기에서 해당 파일을 열면 IDR_MAINFRAME 과 IDR_프로젝트명TYPE 두가지가 있다. 1. IDR_MAINFRAME 응용 프로그램에 열린 document 가 없을때 적용된다. 2. IDR_프로젝트명TYPE 하나 이상의 document가 열릴때 적용된다. 메뉴 관련 메시지 처리기는 메시지 형식에 따라 COMMAND 와 UPDATE_COMMAND_UI 두가지가 있다. 1. COMMAND 메뉴가 선택되었을때 메시지 발생된다. 이벤트 처리기는 선택되는 메뉴 항목에 해당하는 적절한 기능을 제공해야 한다. 2. UPDATE_COMMAND_UI 메뉴가 업데이트 되어야 할때 그 상태(체크 또는 체크 해제 등)에 따라 발생된다...
MFC 기본 코드 프로젝트는 WIN32프로젝트 Windows응용프로그램을 선택하고 빈 프로젝트 옵션을 선택한다. VisualStudio2017 Community 에서는 빈 프로젝트를 만들 수 없어 VisaulStudio2008 로 사용했으나 코드만 이해하면 된다. 4행부터 29행 까지 직접 코딩한다. 클래스는 CWinApp 을 상속받는 CTestApp 과 CFrameWnd 를 상속받는 CMainFrame 클래스 2개만 있으면 된다. 응용프로그램 클래스 CTestApp 의 인스턴스는 WinMain() 이 실행하기 전에 존재해야 하므로, 전역 변수로 선언해야 한다. (29행) 객체가 전역범위에 존재해야 하는 이유는 응용프로그램이며, 응용 프로그램은 실행을 지삭하기 전에 존재해야 하기 때문이다. MFC에 의해..