All posts by kpark
lecture8 – 표준컨트롤
연습문제 – Ex4
연습문제 (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)