All posts by kpark

연습문제 – Ex4

1267210734.hwp
 

연습문제 (4)







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

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

□ 주요 연습 내용 : Menu, Toolbar, ContextMenu, Serialize, FileIO

□ 준비자료 : SimpleStroke.zip (SimpleUI 와 SimplePointSerialize를 참고할 것)




[연습문제] Ex4 (Due by 11/14 수 22시까지)


-cyber 강의실 (cyber.dku.edu)로 source code, executable file, solution/project VC++ 2005 file, 보고서를 학번_이름_Ex1.zip으로 묶어서 낼 것. 보고서 (30%)




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




1. CSimpleStrokeView에 펜의 두께(1,2,3,4,5,6,7), 색깔(Red, Green, Blue, Black, Purple, Yellow)을 바꿀 수 있는 메뉴 아이템을 메뉴바에 추가한다. 그리고, 색깔을 바꿀 수 있는 툴바를 추가한다 (리소스 편집기에서 메뉴와 툴바의 IDR_MAINFRAME을 편집한다). 또한, 오른쪽 마우스를 누르면 컨텍스트 메뉴가 뜨면서 펜의 두께를 지정할 수 있게 한다 (ON_WM_CONTEXTMENU를 추가한다). (20%)




사용자 삽입 이미지




2. CStroke에 직렬화를 추가한다. (20%)


    -멤버 변수: 펜두께(Thickness), 펜색깔 (Color)


    -멤버 함수:  


Serialize(CArchive& ar) 안에 CArchive를 이용하여 loading/storing할 때 멤버 변수 값을 입출력하게 해주는 루틴을 추가한다.




Draw(CDC* pDC) 안에 이 Stroke의 펜두께와 펜색깔을 받아서 새로운 펜을 생성하는 루틴을 추가한다. – 이 함수는 CSimpleStrokeView::OnDraw에서 내부적으로 불리는 것으로, CArchive나 CFile로 읽어들인 Stroke 데이타를 제대로 (각 Stroke별로 지정된 펜두께와 펜색깔로) 그려줄 수 있게 된다.




이 Serialize와 Draw 함수를 만든 후 그림판에 “본인의 이름”을 그리고, 메뉴 Save로 저장해보고, Open을 통해서 다시 열어본다.




3. CSimpleStrokeDoc 클래스에 텍스트파일로 된 Stroke 자료를 저장 (OnFileExport)하고 읽어들이기 (OnFileImport) 기능을 추가한다. (30%)




-OnFileImport 구현


// 한 line씩 읽어들여서,


// 먼저line에”Thickness”가 있는지 찾고, 있으면 new Stroke를 하고


// 이걸 m_StrokeList에 추가한다. (CSimpleStrokeView::OnLButtonDown를 참고)


// 만약 아니면, 새로운Stroke가 아니니까 그냥 이전에 생성한 Stroke의 m_ptArray에


// CPoint 점을 추가한다. (CSimpleStrokeView::OnMouseMove를 참고)




-OnFileExport 구현


// m_StrokeList안에 있는 모든 Stroke 별로,


// 먼저, 이 Stroke의 펜 두께와 색 “Thickness: %d Color: RGB(%d, %d, %d)”를


// 출력한다. 그리고, 이 Stroke의 모든 점들을 (%d, %d)로 출력한다.




– 텍스트파일 (첨부된 Test.txt를 사용하여 테스트해 볼 것)의 포멧


Thickness: 7 Color: RGB(255, 255, 0)


(182, 49)


(179, 53)


(176, 60)


(172, 70)


(166, 79)


(159, 90)


(153, 100)


(147, 111)




Thickness: 2 Color: RGB(0, 0, 255)


(479, 175)


(479, 185)


(479, 195)


(479, 211)


(476, 223)


(464, 244)


(452, 258)


(423, 287)


(399, 311)