Download presentation
Presentation is loading. Please wait.
1
Lab 1 Guide: 교재 2장 DrawX (130-158쪽)
2
실습 목적 및 장비 실습 목적 장비: PC, 윈도우 운영체제, Visual Studio (VC++ 6.0)
AppWizard 사용 방법 및 기능 이해 단일 문서 애플리케이션 구조 문서/뷰 구조의 이해와 응용 직렬화의 이해: 문서의 저장 및 불러 오기 윈도우 프로그래밍 기초 이벤트 처리 메뉴 사용 방법 기초 간단한 이벤트 처리 간단한 그래픽 기능 장비: PC, 윈도우 운영체제, Visual Studio (VC++ 6.0)
3
단계 1: 기본 프로그램 기본 프로그램 개요 Single Document 애플리케이션 마우스 클릭 위치에 X 표시를 그림
실행 파일(
4
단계 1: 기본 프로그램 X 표시 View 클래스에서 WM_LBUTTONDOWN 메시지 처리 함수인 OnLButtonDown(UINT nFlags, CPoint point)를 추가하고 정의 코드 #define SIZE 10 void CDrawXView::OnLButtonDown(UINT nFlags, CPoint point) { CClientDC dc(this); dc.MoveTo(point.x-SIZE, point.y-SIZE); dc.LineTo(point.x+SIZE, point.y+SIZE); dc.MoveTo(point.x-SIZE, point.y+SIZE); dc.LineTo(point.x+SIZE, point.y-SIZE); CView::OnLButtonDown(nFlags, point); } #define SIZE 10 void CDrawXView::DrawX(CPoint point) { CClientDC dc(this); dc.MoveTo(point.x-SIZE, point.y-SIZE); dc.LineTo(point.x+SIZE, point.y+SIZE); dc.MoveTo(point.x-SIZE, point.y+SIZE); dc.LineTo(point.x+SIZE, point.y-SIZE); } void CDrawXView::OnLButtonDown(UINT nFlags, CPoint point) DrawX(point); CView::OnLButtonDown(nFlags, point); 또는
5
단계 2: 기능 확장 프로그램 실행 파일( 기본 프로그램의 경우 화면의 자동 복원 기능 없음 Document/View 구조의 사용 View 클래스의 가상 함수 OnDraw(CDC *pDC)에 화면 복원 기능을 정의 메뉴 추가 2배 확대해서 보기/원래 크기로 보기 각 메뉴 항목에 대해 COMMAND 처리 함수 추가 Invalidate(): OnDraw()를 호출하여 화면을 새로 그리게 함 UpdateAllViews(NULL): 현재의 문서에 연계된 모든 View를 새로 그리게 함
6
단계 2: 기능 확장 프로그램 데이터 저장 및 읽어 오기
Document 클래스의 가상 함수 Serialize(CArchive &ar)를 재정의 void CDrawXDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) // add storing code here ar<<m_nCount; for(int i = 0; i <= m_nCount; i++) ar<<m_ptData[i]; } else // add loading code here ar>>m_nCount; ar>>m_ptData[i];
7
데이터 저장 및 읽어 오기 Application framework 파일 메뉴 처리 ID_FILE_NEW
ID_FILE_OPEN ID_FILE_SAVE ID_FILE_SAVE_AS ID_FILE_NEW CWinApp class OnFileNew() 커맨드 핸들러 함수 새로운 Document 생성 CDocument의 맴버 함수 OnNewDocument() 호출 CDocument class - 새로운 instance 생성 OnNewDocument() 호출됨
8
데이터 저장 및 읽어 오기 ID_FILE_OPEN CWinApp class CDocument class ID_FILE_SAVE
OnFileOpen() 커맨드 핸들러 함수 - 파일명 입력 받음 새로운 Document 생성 CDocument의 맴버 함수 OnOpenDocument() 호출 (파일명을 인자로 넘겨줌) CDocument class - 새로운 instance 생성 OnOpenDocument() 호출됨 Serialize() 함수 호출 ID_FILE_SAVE OnFileSave() 커맨드 처음 저장하는 경우 파일명 입력 받음 OnSaveDocument() 호출 - OnSaveDocument() 호출됨
9
데이터 저장 및 읽어 오기 CObject 클래스에는 데이터의 저장 및 읽기를 위한 Serialize 함수가 구현되어 있음
대부분의 MFC class는 CObject에서 파생, 따라서 Serialize 함수 사용가능 그러나, 저장 및 읽는 방식이 다르기 때문에 실제로는, 사용자가 overriding 한다. CDocument 파생 클래스: Serialize 함수가 overriding 되어 있음 void CdrawXDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) } else
10
데이터 저장 및 읽어 오기 CDocument CArchive CMemFile CFile CSocketFile Memory
Serialize CDocument CArchive CMemFile CFile CSocketFile Serialize Memory Disk Network CAarchive 클래스 instance를 하나 만들어 Serialize 함수에 넘겨줌 (Instance는 입출력 파일이름 save인가, open인가 여부 등의 정보를 갖고 있음) CDocument 클래스와 다른 입출력 클래스 (Cfile)를 연결시켜주는 클래스
Similar presentations