실습숙제 4 (Due by 11/14)


□ 단원 : 사용자 인터페이스 & 파일입출력


□ 목표 : 메뉴 아이템 및 툴바 추가 연습 & 직렬화 및 파일 입출력


□ 주요 연습 내용 : Doc/View Architecture, Menu, Toolbar, Serialize


□ 준비자료 : SimpleShapeDrawing.zip


(SimpleMouseDrawing-GUI, SimplePointSerialize, SimpleTextListFile 등을 참고할 것)
1302908164.zip
[연습문제] Ex4 (Due by 11/14 금 24시까지)
-cyber 강의실 (cyber.dku.edu)로 source code, executable file, solution/project VC++ 2005 file, 보고서를 학번_이름_Ex4.zip으로 묶어서 낼 것. 보고서 (30%)


0. 생성한 프로그램의 메인 프레임의 Title을 “HCI2_Ex4_이름_학번”으로 바꾼다. (힌트: Resource View에서 String Table의 IDR_MAINFRAME에 Caption을 “HCI2_Ex4_<이름>_<학번>”으로 하면 됨)



1. 직렬화가 가능한 CShapeObject 클래스와 CShapeObject 클래스를 상속한 CLineObject, CRectangleObject, CEllipseObject 클래스를 작성한다. (20%)



CShapeObject : public CObject
-멤버 변수:
  o 도형의 종류 (m_nShapeMode),
  o 시작/끝점 (m_ptStart, m_ptEnd),
  o 펜색깔 (m_Color),
  o 펜두께(m_nThickness)
-멤버 함수:  
  o Serialize(CArchive& ar) 함수 안에 CArchive를 이용하여 Loading/Storing할 때 멤버 변수 값을 입출력하게 해주는 루틴을 추가한다.
DECLARE_SERIAL(CShapeObject)/ IMPLEMENT_SERIAL(CShapeObject, CObject, 1) 사용함



CLineObject/CRectangleObject/CEllipseObject : public CShapeObject
-멤버 함수:  
  o Serialize(CArchive& ar) 함수를 추가한다.
  o Draw(CDC* pDC) 함수는 도형의 시작/끝점과 펜색깔과 두께 정보를 가지고
  실제도형(선/사각형/타원)을 그려주는 출력 루틴을 추가한다.
 
DECLARE_SERIAL(CLineObject)/ IMPLEMENT_SERIAL(CLineObject, CShapeObject, 1)
DECLARE_SERIAL(CRectangleObject)/ IMPLEMENT_SERIAL(CRectangleObject, CShapeObject, 1)
DECLARE_SERIAL(CEllipseObject)/ IMPLEMENT_SERIAL(CEllipseObject, CShapeObject, 1) 사용함



2. CSimpleShapeDrawingDoc 클래스에 새로운 도큐먼트 생성, 저장, 읽어 들이기 기능과 도형 리스트의 관리 기능을 추가한다. (10%)

CSimpleShapeDrawingDoc
-멤버 변수:
  o 현재 도형의 종류 (m_nShapeMode),
  o 펜색깔 (m_Color),
  o 펜두께(m_nThickness),
  o 도형 리스트 (CTypedPtrList<CObList, CShapeObject*> m_ShapeObjectList)

-멤버 함수:  
 o 소멸자 함수에서는 모든 도형의 리스트 원소들을 모두 지운다.
 o File->New를 위한  DeleteContents() 함수를 추가한다. 이 함수는
 OnNewDocument()함수에서 내부적으로 불리는 것으로, 이 함수에 도형의 리스트
 원소들을 모두 지운다.
 o File->Open/Save/SaveAs를 위한 Serialize(CArchive& ar) 함수를 추가한다.
 이 함수 안에 CArchive를  이용하여 Loading/Storing할 때 도형의 리스트를
 입출력해준다.
 o 도형을 리스트에 추가/제거하는 등의 함수를 추가한다.
 void AddShapeObject(CShapeObject* pObj);    
 void DeleteShapeObject(CShapeObject* pObj);      unsigned int GetShapeObjectType();
 COLORREF GetShapeObjectColor();
 int GetShapeObjectThickness();
 POSITION GetListHeadPosition(); // Return list head POSITION value
 CShapeObject* GetNext(POSITION& aPos); // Return current object pointer



3. CSimpleShapeDrawingView 클래스의  OnMouseMove 함수 안에서 도형의 속성에 따른 선/사각형/타원 도형을 생성하고 그려주는 루틴을 추가한다. (10%)



4. 도형(선, 사각형, 타원형), 펜의 두께(1,2,3,4,5), 색깔(Red, Green, Blue, Black)을 바꿀 수 있는 메뉴 아이템을 메뉴바에 추가한다. 그리고, 도형과 색깔을 바꿀 수 있는 툴바를 추가한다. (리소스 편집기에서 메뉴와 툴바의 IDR_MAINFRAME을 편집한다) (20%)


 ON_COMMAND(ID_SHAPE_LINE, &CSimpleShapeDrawingDoc::OnShapeLine)
 ON_COMMAND(ID_SHAPE_RECTANGLE, &CSimpleShapeDrawingDoc::OnShapeRectangle)
 ON_COMMAND(ID_SHAPE_ELLIPSE, &CSimpleShapeDrawingDoc::OnShapeEllipse)
 ON_COMMAND(ID_COLOR_RED, &CSimpleShapeDrawingDoc::OnColorRed)
 ON_COMMAND(ID_COLOR_BLUE, &CSimpleShapeDrawingDoc::OnColorBlue)
 ON_COMMAND(ID_COLOR_GREEN, &CSimpleShapeDrawingDoc::OnColorGreen)
 ON_COMMAND(ID_COLOR_BLACK, &CSimpleShapeDrawingDoc::OnColorBlack)
 ON_COMMAND(ID_THICKNESS_1, &CSimpleShapeDrawingDoc::OnThickness1)
 ON_COMMAND(ID_THICKNESS_2, &CSimpleShapeDrawingDoc::OnThickness2)
 ON_COMMAND(ID_THICKNESS_3, &CSimpleShapeDrawingDoc::OnThickness3)
 ON_COMMAND(ID_THICKNESS_4, &CSimpleShapeDrawingDoc::OnThickness4)
 ON_COMMAND(ID_THICKNESS_5, &CSimpleShapeDrawingDoc::OnThickness5)



5. 직접 본인이 원하는 열 개 이상의 도형을 그려보고, 저장과 읽어들이기, 새로운 도큐먼트 생성하기를 수행해보고, 그 결과를 모두 출력해서 넣는다. (10%)

MFC Doc/View Application Program

.NET2005


  • MFC App 프로젝트 새로 만들기

    • 메뉴에서 File->New->Project->Visual C++ 템플릿->MFC->MFC Application를 선택한 후 “프로젝트 이름(예를 들어, SimpleTextFile)”을 적고 확인버튼을 누른다.
    • SDI, Use MFC in a Shared DLL, Doc/View Architecture Support, 한국어 선택하고 Next 버튼을 누른다.
    • 데이터베이스는 None으로 선택하고 Next버튼을 누른다.
    • 사용자인터페이스 확인하고 Next버튼을 누른다.
    • Advanced Features에서 ActiveX를 선택해제한다.
    • 그리고, Generated Classes를 확인하고 Finish버튼을 누른다.

    사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지사용자 삽입 이미지
     


  • 코드 추가

    • CSimpleTextFileView::OnDraw에 출력함수(예: “dc.TextOut(100, 100, CString(“안녕하세요”))을 추가한다.


     


  • 빌드(F7)와 실행 (F5 or CTRL+F5)
  • SimpleTextListFile-예제

    SimpleTextListFile 예제
    -Doc/View 구조 사용
         -Doc 클래스 m_TextObjectList 관리
         -View 클래스 문자입력 및 TextObject 추가 & Hide/Show캐럿
    -CTextObject 클래스
         -Draw & Append 텍스트
         -직렬화된 클래스 만들기 (DECLARE_SERIAL/IMPLEMENT_SERIAL & Serialize)
    -Serialze(CArchive& ar)를 이용한 CTextObject 배열의 파일 입출력 – Text.dat
    1174557059.zip