Visual C++ Programming Document/View Architecture Department of Digital Contents Sang Il Park.

Slides:



Advertisements
Similar presentations
데이터 완전삭제프로그램 Perfect Delete 사용설명서  주의 이 프로그램을 이용하여 삭제된 데이터는 어떠한 방법으 로도 복구가 불가능합니다. 그러므로 실제 데이터 삭제시 신중을 기하기 바랍니다.
Advertisements

CH5 디버그를 해보자 디버그 디버거 : 실행중인 응용 프로그램을 지정한 장소에서 정지하고, 그 시 점에서 변수, 메모리, 콜 스택의 내용을 참조하는것이 가능 Build -> Start Debug -> Go.
Hallym Univ MFC 개요 및 사용법 발표자 : 최 원 민 1 목 차목 차  MFC 의 개요  MFC 프로그램의 구조  SDI(Single Document Interface) 애플리케이션 구조  MDI(Multiple Document Interface)
1 컴퓨터정보과 MFC 의 개요 MFC 윈도우 애플리케이션을 생성하기 위해 만들어진 C++ 클래스 라이브러리 애플리케이션 프레임워크를 제공 MFC 의 이점 윈도우 프로그램 전문가로 만들어 준다. 개발시간을 단축시키고, 이식성이 강한 코드를 작성 ActiveX, OLE,
MFC의 개요 MFC MFC의 이점 윈도우 애플리케이션을 생성하기 위해 만들어진 C++ 클래스 라이브러리
프로젝트 보고서 학과 : 임학과 학번 : 성명 : 조성환 Windows 프로그래밍.
Visual C++ Programming Document/View Architecture
컴퓨터 공학 설계 및 실험 I MFC programming
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
03장 영상처리를 위한 Visual C++ 디지털 영상 파일 포맷 MFC 응용 프로그램 마법사를 이용한 MFC 프로젝트 작성
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
MFC Application Frameworks (AFX)
Lecture 2 MFC and Application Frameworks
Visual C++ Programming Dialog Box
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
Chapter 1 윈도우 프로그래밍 들어가기 윈도우 응용 프로그램을 작성하기 위해 필요한 기본 개념을 정립하고 Visual Studio를 설치한 후 MFC 응용 프로그램 마법사를 사용하여 MFC 프로그램을 작성하는 방법을 학습한다.
Visual C++ Programming Document/View Architecture 3
제 1 장 영상처리 기초.
Power Java 제3장 이클립스 사용하기.
MS-Access의 개요 1강 MOS Access 2003 CORE 학습내용 액세스 응용 프로그램은 유용한 데이터를
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
최윤정 Java 프로그래밍 클래스 상속 최윤정
Entity Relationship Diagram
윤 홍 란 다이알로그(대화상자) 윤 홍 란
MFC를 이용한 네트워크게임 졸업 프로젝트 담당 교수 : 김재형 교수님 김 성준 김 민기.
MFC 발전 과정과 주요 특징을 개괄적으로 이해한다.
윤 홍 란 MFC 기초 윤 홍 란
졸업작품발표 타자 연습 프로그램 By.. Eunju 담당 교수 : 이형원 교수님 학번 : 이름 : 김은주.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
Lesson 6. 형변환.
Network Socket Programming
CH 1. MFC 전체보기 정보통신공학과 안 재 형.
MFC Application Frameworks (AFX)
Visual C++ Programming Common Controls
대화상자 편집기의 사용법을 익힌다. 모드형 대화상자와 비 모드형 대화상자의 차이점을 이해하고 작성 방법을 익힌다.
Visual C++ Programming Output and File
1. C++ 시작하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
C++ Espresso 제12장 템플릿.
03장 영상처리를 위한 Visual C++ 디지털 영상 파일 포맷
프로그래밍 랩 – 7주 리스트.
분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일.
13. 연산자 오버로딩.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
영상처리 실습 인공지능연구실.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
PRM 정보관리 업체 메뉴얼
MVC 모델을 이용한 웹 애플리케이션 작성 웹 애플리케이션 개발 순서를 알아본다 웹 애플리케이션의 실행 순서를 이해한다.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
Lab 9 Guide: 인터넷 프로그래밍 예제 * 일대일 채팅 프로그램 (교재 27장, 쪽)
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바 5.0 프로그래밍.
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
CHAP 21. 전화, SMS, 주소록.
객체기반 SW설계 팀활동지 4.
11. 어댑터뷰 제목. 11. 어댑터뷰 제목 리스트뷰와 그리드뷰 활용법을 배운다. 갤러리와 스피너의 사용법을 익힌다.
Chapter7. 도큐먼트와 파일 입출력 이 학 주.
가장 많이 사용 Accelerator 최상위 WM_COMMAND, OLE 메시지 관련 이벤트 처리만 가능 이 클래스를 상속받아서 다른 이벤트 처리 이벤트 처리 관련 윈도우(창) 최상위 클래스 멀티 테스킹(모듈) CFrameWnd, Cview,
3. 모듈 (5장. 모듈).
1. 입력 데이터 ② 대학, 학과: 대학이 존재하지 않을 경우 학과명을 대학에 입력 학과명은 공백으로 유지 (하단 참조)
9 브라우저 객체 모델.
워드프로세서 스프레드시트 문서 관리 인터넷 활용
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
MFC 응용 프로그램 구조 두 개의 윈도우로 구성된 일반적인 MFC 프로그램 프레임 윈도우
6 객체.
MFC 기초 윈도우 응용프로그램 개발 간략한 역사 Microsoft Foundation Classes
BoardGame 보드게임 따라가기.
Presentation transcript:

Visual C++ Programming Document/View Architecture Department of Digital Contents Sang Il Park

2 도큐먼트 / 뷰 구조 (1/3) 도큐먼트와 뷰 클래스의 역할 클래스역할 도큐먼트 데이터를 저장하거나 읽어들인다. 데이터의 변경 사항이 생기면 뷰의 화면을 갱신한다. 뷰 데이터를 화면에 표시한다. 사용자와의 상호 작용을 담당한다.

3 도큐먼트 / 뷰 구조 (2/3) 도큐먼트 / 뷰 구조의 장점 – 서로 다른 기능을 도큐먼트와 뷰 클래스로 분리해서 구현 하기 때문에 개념적으로 이해하기 쉽다. – 하나의 도큐먼트에 여러 개의 뷰가 존재하는 모델을 구현 하기가 쉽다. 예 ) 비주얼 C++ 편집창 –MFC 에서 도큐먼트 / 뷰 구조를 위해 제공하는 부가적인 서비스를 이용할 수 있다. 예 ) 직렬화

4 도큐먼트 / 뷰 구조 (3/3) SDI 와 MDI – 다룰 수 있는 문서의 개수에 따라 구분

5 SDI 응용 프로그램 구조 (1/11) SDI 응용 프로그램 구조 1 응용 프로그램 (CWinApp) 도큐먼트 템플릿 (CSingleDocTemplate) 도큐먼트 (CDocument) 뷰 (CView) 프레임 윈도우 (CFrameWnd)

6 SDI 응용 프로그램 구조 (2/11) SDI 응용 프로그램 구조 2 응용 프로그램 (CWinApp) 도큐먼트 템플릿 (CSingleDocTemplate) 도큐먼트 (CDocument) 뷰 (CView) 프레임 윈도우 (CFrameWnd) 뷰 (CView)

SDI 응용 프로그램 구조 (4/11) 주요 객체 사이의 참조 도큐먼트뷰 프레임 윈도우 GetFirstViewPosition & GetNextView GetDocument GetActiveDocumentGetActiveView 응용 프로그램 AfxGetMainWnd AfxGetApp m_pMainWnd GetParentFrame 도큐먼트 템플릿 GetFirstDocTemplatePosition & GetNextDocTemplate GetDocTemplate GetFirstDocPosition & GetNextDoc

8 SDI 응용 프로그램 구조 (5/11) 함수 요약 –CWinApp* AfxGetApp ( ); 응용 프로그램 객체의 주소를 리턴 –CWnd* AfxGetMainWnd ( ); 메인 윈도우 객체의 주소를 리턴 –CFrameWnd* CWnd::GetParentFrame ( ); 프레임 윈도우 객체의 주소를 리턴 –CView* CFrameWnd::GetActiveView ( ); 활성 뷰 객체의 주소를 리턴

9 SDI 응용 프로그램 구조 (6/11) 함수 요약 (cont'd) –CDocument* CFrameWnd::GetActiveDocument ( ); 활성 도큐먼트 객체의 주소를 리턴 –CDocument* CView::GetDocument ( ); 뷰 객체와 연결된 도큐먼트 객체의 주소를 리턴 –POSITION CDocument::GetFirstViewPosition ( ); CView* CDocument::GetNextView (POSITION& rPosition); 도큐먼트 객체와 연결된 모든 뷰 객체의 주소를 리턴 도큐먼트 객체 m_viewList 뷰 객체 #1 뷰 객체 #2 뷰 객체 #3 NULL

10 SDI 응용 프로그램 구조 (7/11) 함수 요약 (cont'd) –POSITION CWinApp::GetFirstDocTemplatePosition ( ); CDocTemplate* CWinApp::GetNextDocTemplate (POSITION& pos); 응용 프로그램 객체가 관리하는 모든 도큐먼트 템플릿 객체의 주 소를 리턴 응용 프로그램 객체 m_templateList 도큐먼트 템플릿 객체 #1 도큐먼트 템플릿 객체 #2 도큐먼트 템플릿 객체 #3 NULL

11 SDI 응용 프로그램 구조 (8/11) 함수 요약 (cont'd) –POSITION CDocTemplate::GetFirstDocPosition ( ); CDocument* CDocTemplate::GetNextDoc (POSITION& rPos); 도큐먼트 템플릿 객체가 관리하는 모든 도큐먼트 객체의 주소 를 리턴 –CDocTemplate* CDocument::GetDocTemplate ( ); 도큐먼트 객체와 연결된 도큐먼트 템플릿 객체의 주소를 리턴 도큐먼트 템플릿 객체 m_docList 도큐먼트 객체 #1 도큐먼트 객체 #2 도큐먼트 객체 #3 NULL

문서 / 뷰 구조 좀 더 자세히 보기 단일 문서를 다시 만든다. – 문서 템플릿 문자열을 편집

13 SDI 응용 프로그램 구조 (9/11) InitInstance() 함수 BOOL CExSDIApp::InitInstance() {... ① SetRegistryKey(_T(" Local AppWizard-Generated Applications ")); ② LoadStdProfileSettings(); CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CExSDIDoc), RUNTIME_CLASS(CMainFrame), RUNTIME_CLASS(CExSDIView)); AddDocTemplate(pDocTemplate);

14 SDI 응용 프로그램 구조 (10/11) InitInstance() 함수 (cont'd) ③ EnableShellOpen(); ④ RegisterShellFileTypes(TRUE); CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); if (!ProcessShellCommand(cmdInfo)) return FALSE; m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); ⑤ m_pMainWnd->DragAcceptFiles(); return TRUE; }

15 SDI 응용 프로그램 구조 (11/11) 도큐먼트 문자열 ExSDI\n\nExSDI\nExSDI 파일 (*.sdi)\n.sdi\nExSDI.Document ① ② ③ ④ ⑤ ⑥ \nExSDI Document ⑦

16 도큐먼트 클래스 (1/3) 주요 함수 –void SetModifiedFlag (BOOL bModified = TRUE); 도큐먼트 객체가 유지하는 데이터를 수정한 경우 호출 –void UpdateAllViews (CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL); 도큐먼트 객체와 연결된 모든 뷰의 화면을 갱신 CDocument::UpdateAllViews()  CWnd::Invalidate()  CView::OnUpdate()  CWnd::OnPaint()  CView::OnDraw() 도큐먼트 객체 뷰 객체

17 도큐먼트 클래스 (2/3) 주요 함수 (cont'd) –virtual BOOL OnNewDocument ( ); 새 문서를 생성할 때 자동으로 호출 –virtual BOOL OnOpenDocument (LPCTSTR lpszPathName); 파일을 열 때 자동으로 호출 –virtual void DeleteContents ( ); 새로운 문서를 생성하거나 파일을 열 때 자동으로 호출 –virtual void Serialize (CArchive& ar); 파일을 열거나 저장할 때 자동으로 호출

18 도큐먼트 클래스 (3/3) 가상 함수 호출 순서 –[ 파일 ]->[ 새 파일 ] 메뉴 항목을 선택할 때 –[ 파일 ]->[ 열기...] 메뉴 항목을 선택할 때 –[ 파일 ]->[ 저장 ] 또는 [ 파일 ]->[ 다른 이름으로 저장...] 메뉴 항목을 선택할 때 DeleteContents()  OnNewDocument() DeleteContents()  Serialize()  OnOpenDocument() Serialize()

19 뷰 클래스 주요 함수 –virtual void OnDraw (CDC* pDC); 화면 출력, 인쇄, 인쇄 미리보기를 할 때 자동으로 호출 –virtual void OnInitialUpdate(); 뷰 객체가 도큐먼트 객체와 연결된 후 화면에 보이기 전에 자동으 로 호출 –virtual void OnUpdate (CView* pSender, LPARAM lHint, CObject* pHint); CDocument::UpdateAllViews() 함수와 CView::OnInitialUpdate() 함수에서 호출

코딩연습 Document/View 구조를 사용하여 원을 그리고, 저장 / 로드 하는 프로그램을 만들자. 고쳐야 하는 부분 CView:: OnDraw() CDocument:: OnNewDocument() Serialize() 고쳐야 하는 부분 CView:: OnDraw() CDocument:: OnNewDocument() Serialize()

Splitter Window

22 분할 윈도우 (1/4) 동적 분할 윈도우 – 같은 뷰 클래스를 기반으로 여러 개의 뷰를 생성 – 총 네 개의 구획 (Pane) 생성 가능

23 분할 윈도우 (2/4) 동적 분할 윈도우 구현

분할 윈도우 (2/4) 동적 분할 윈도우로 다양한 내용 출력하기 : 1. 현재의 뷰가 어떠한 어떤 pane 에 속하는지 판단 2. 각 pane 에 따라 출력한 내용을 달리한다. bool CSpliterWnd::IsChildPane ( CWnd * wnd, int * row, int * col ) if (col == 0) { … } Else if (col == 1) { …, } if (col == 0) { … } Else if (col == 1) { …, }

25 분할 윈도우 (3/4) 정적 분할 윈도우 – 서로 다른 뷰 클래스를 기반으로 여러 개의 뷰를 생성 – 총 256 개의 구획 생성 가능

26 분할 윈도우 (4/4) 정적 분할 윈도우 구현 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext) { m_wndSplitter.CreateStatic(this, 2, 1); m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CFirstView), CSize(300, 200), pContext); m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CSecondView), CSize(300, 200), pContext); return TRUE; }

다양한 View Classes

다양한 View Class? View Class 에는 많은 종류가 있다

다양한 View Class? Project 생성 시 Setting:

FormView Dialog Box 와 비슷한 역할을 하는 View Class