실습숙제 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%)

Leave a Reply

Your email address will not be published. Required fields are marked *