Visual C++ 구성. DevStudio –Visual C++ 를 실행시키면 전면에 뜨는 프로그램. – 텍스트에디터, 리소스에디터, 디버거 등 모든 기능 총괄 MFC(Microsoft Foundation Class) – 윈도우 프로그램을 만드는데 필요한 거의 모든.

Slides:



Advertisements
Similar presentations
메시지 처리의 기본 개념 메시지 발생된 이벤트의 종류와 정보를 전달하는 일종의 상수 값 윈도우 프로그래밍 가장 중요한 것은 메시지를 처리하는 것 윈도우 시스템 Application 이벤트 발생 메시지 전송 메시지 처리 화면에 출력.
Advertisements

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++ 클래스 라이브러리
Visual C++ Programming Document/View Architecture Department of Digital Contents Sang Il Park.
Visual C++ Programming Document/View Architecture
컴퓨터 공학 설계 및 실험 I MFC programming
메뉴 용어 (1/6) 최상위 메뉴 = 메뉴 바 최상위 메뉴 = 메뉴 바.
윈도우 프로그래밍 실습 김 창 헌.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
윈도우 운영체제와 윈도우 응용 프로그램의 특징을 이해한다.
MFC Application Frameworks (AFX)
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Lecture 2 MFC and Application Frameworks
Visual C++ Programming Dialog Box
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
Chapter 1 윈도우 프로그래밍 들어가기 윈도우 응용 프로그램을 작성하기 위해 필요한 기본 개념을 정립하고 Visual Studio를 설치한 후 MFC 응용 프로그램 마법사를 사용하여 MFC 프로그램을 작성하는 방법을 학습한다.
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Chapter 10. AWT 이벤트.
Power Java 제3장 이클립스 사용하기.
윤 홍 란 다이알로그(대화상자) 윤 홍 란
MFC를 이용한 네트워크게임 졸업 프로젝트 담당 교수 : 김재형 교수님 김 성준 김 민기.
MFC 발전 과정과 주요 특징을 개괄적으로 이해한다.
Department of Digital Contents Sang Il Park
윤 홍 란 MFC 기초 윤 홍 란
Lab 2 Guide: 교재 3장 그래픽 예제 ( 쪽) - 펜과 브러시로 그리기 - 튀는 공
공통 컨트롤의 종류와 특징을 개관한다. 각종 공통 컨트롤의 사용 방법을 익힌다..
졸업작품발표 타자 연습 프로그램 By.. Eunju 담당 교수 : 이형원 교수님 학번 : 이름 : 김은주.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Microsoft Visual C++ 제 1편 입문편 5장. 샘플 프로그램의 사용자화
CH 1. MFC 전체보기 정보통신공학과 안 재 형.
MFC Application Frameworks (AFX)
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
TETRIS FOR QTOPIA.
Visual Basic .NET 처음 사용하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
03장 영상처리를 위한 Visual C++ 디지털 영상 파일 포맷
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
Visual C++ Programming Menu
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일.
자바 5.0 프로그래밍.
13. 연산자 오버로딩.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
자바응용.
영상처리 실습 인공지능연구실.
GUI 소켓 애플리케이션 Chapter 08. * 학습목표 윈도우 GUI 애플리케이션의 구조와 동작 원리를 이해
Lesson 2. 기본 데이터형.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성. 학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성.
영상처리 실습 (OpenCV + MFC) Chonbuk National University A.I. Lab.
.Net Web Application 2007 컴퓨터공학실험(Ⅰ)
가장 많이 사용 Accelerator 최상위 WM_COMMAND, OLE 메시지 관련 이벤트 처리만 가능 이 클래스를 상속받아서 다른 이벤트 처리 이벤트 처리 관련 윈도우(창) 최상위 클래스 멀티 테스킹(모듈) CFrameWnd, Cview,
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
3. 모듈 (5장. 모듈).
구조체(struct)와 공용체(union)
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
CODE INJECTION 시스템B 김한슬.
MFC 응용 프로그램 구조 두 개의 윈도우로 구성된 일반적인 MFC 프로그램 프레임 윈도우
MFC 기초 윈도우 응용프로그램 개발 간략한 역사 Microsoft Foundation Classes
Presentation transcript:

Visual C++ 구성

DevStudio –Visual C++ 를 실행시키면 전면에 뜨는 프로그램. – 텍스트에디터, 리소스에디터, 디버거 등 모든 기능 총괄 MFC(Microsoft Foundation Class) – 윈도우 프로그램을 만드는데 필요한 거의 모든 오브젝트를 약 300 여개의 계층구조적인 클래스로 구현해 놓은 클래스 라이브러리. AppWizard – 프로그램의 초기 코드를 생성해주는 모듈로서 MFC 에서 상속받은 클래스를 만들어주는 역할을 함

ClassWizard – 클래스를 비쥬얼하게 관리해주는 툴. 컴포넌트 갤러리 – 이미 만들어진 C++ 클래스와 OLE 커스텀 컨트롤을 포함하여 재사용할 수 있는 컴포넌트를 저장하는 창고로, 마우스를 클릭하기만 하면 프로그램에 삽입 가능.

MFC 구성 거의 모든 MFC 클래스의 기반 클래스 에플리케이션 프로그램의 뼈대를 이루는 클래스 윈도우 관련 클래스 그래픽 관련 클래스 자료 구조 클래스 파일 및 데이터베이스 관련 클래스 인터넷 관련 클래스 OLE 관련 클래스 에러 처리 및 디버깅을 위한 클래스

MFC 구성 기반 클래스 CObject –MFC 의 대부분은 CObject 클래스로부터 상속 받아 만들어짐 – 기능 클래스 자신의 정보를 디스크에 저장하는 기능 자신이 어떤 클래스인지에 대한 정보를 넘겨주는 기능. 애플리케이션 프로그램의 뼈대를 이루는 클래스 – 모든 프로그램이 공통적으로 수행하는 기능들을 구현해 놓은 클래스 –Application Frameworks (AFX)

– 객체 지향 프로그램밍 애플리케이션 프로그램을 구성하는 오브젝트 단위로 분할 CFrameWndCView 윈도우와 프레임을 관리데이터를 보여주는 윈도우 CDocument 데이터를 저장, 처리 ( 눈에는 안보임 ) CWinApp 위의 세 오브젝트를 묶어주고, 프로그램을 구동시킴 ( 눈에는 안보임 )

분리된 오브젝트는 철저하게 역할 분담 프레임 윈도우와 뷰를 분리 – 뷰 (CView) : 프로그램에서 작업한 데이터를 보여주는 일 – 프레임 윈도우 (CFrameWnd): 뷰를 둘러싸고 있는 창틀, 윈도우의 이동, 크기 조절, 최소화, 최대화 등 윈도우 제어에 관련된 일 수행. 도큐먼트와 뷰 분리 – 데이터를 저장하고 처리하는 데 관련된 일 ( 도큐먼트 ) 과 이를 보여주는 데 관련된 일 ( 뷰 ) 를 분리함으로써 클래스의 역할을 분담시키고, 각 클래스의 구현을 조금이라도 단순화. – 같은 데이터라도 보여주는 방법이 다양할 수 있기 때문. –CDocument 클래스 : 데이터를 저장하고, 읽어오고, 처리하기 위한 모든 기능 구현 –CView 클래스 : CDocument 클래스에 있는 데이터를 참조할 수 있는 기능

–AFX 클래스의 상속 관계 CObject CCmdTarget CWinApp CDocument CWnd CFrameWnd CView 거의 모든 MFC 클래스의 기반 클래스 커맨드 메시지를 받는 기능 프로그램을 구동시키는 기능 데이터를 저장하고 처리하는 기능 윈도우에 관련된 기능 ( 눈에 보이는 오브젝트 ) 프로그램 윈도우 프레임 ( 외곽 ) 관리 데이터를 보여주는 윈도우 관리

윈도우 관련 클래스 CObject CWnd CFrameWnd CView CDialog CSpliterWnd CControlBar CPropertySheet CPropertyPage COlePropertyPage 각종 컨트롤 클래스들 거의 모든 MFC 클래스의 기반 클래스 모든 윈도우 관련 클래스의 기반 클래스 프레임 윈도우 관련 클래스의 기반 클래스 뷰 관련 클래스의 기반 클래스 다이얼로그 박스 관련 클래스의 기반 클래스 분할 윈도우 클래스 컨트롤 바 관련 클래스의 기반 클래스 프로퍼티 시트 클래스 프로퍼티 페이지 클래스 OLE 프로퍼티페이지 클래스

–CFrameWnd 에서 상속받아 만들어진 클래스 프레임 윈도우 –Cview 에서 상속받아 만들어진 클래스들 CEditView, CScrollView, CFormView, CRecordView, CListView, CTreeView 등. –Cdialog 에서 상속받아 만들어진 클래스들 다이얼로그 박스를 제어하기 위한 클래스 –CControlBar 에서 상속받아 만들어진 클래스 툴바, 상태바, 다이얼로그바가 가지는 공통적인 속성 ( 윈도우가 이동하거나크기가 변하면 따라서 변경 ) 되는 공통적인 속성 구현. CToolBar, CStatusBar, CDialogBar.

– 각종 컨트롤 클래스들 CObject CWnd CAnimateCtrl CButton CBitmapButton CComboBax CEdit CHeaderCtrl CHotkeyCtrl CListBox CCheckListBox CDragListBox CListCtrl COleControl CProgressCtrl CRichEditCtrl CScrollBar CSliderCtrl CSplitButtonCtrl CStatic CStatusBarCtrl CTabCtrl CToolBarCtrl CToolTipCtrl CTreeCtrl

그래픽 관련 클래스 디바이스 컨텍스트 클래스 GDI 오브젝트 클래스

자료구조 클래스 데이터 구조 클래스들 – 배열 클래스들 – 연결 리스트 클래스 – 맵 클래스 데이터형 클래스들 –CPoint –CSize –CRect –CString –CTime –CTimeSpan

파일 및 데이터베이스 관련 클래스 인터넷 관련 클래스 OLE 관련 클래스 에러처리와 디버깅을 위한 클래스

코딩 규칙 멤버 변수 –m_ 로 시작 int m_NumberOfStudent, m_Grade; 헝가리안 표기법 접두어의미접두어의미 a 배열 b 또는 f Bool 형 변수 by BYTE(unsigned char) 형 변수 c counter 형 변수 ch char 형 변수 d 날짜형 변수 dbl double 형 변수 cx, cy x, y 길이를 나타내는 변수 h handle 형 변수 n 또는 i int 형 변수 l long 형 변수 p 포인터 변수 lp long 포인터 변수 s 문자열 sz 널문자로 끝나는 문자열 u unsigned int 형 변수 w word 형 변수 str CString 형 변수

윈도우 프로그래밍에서 정의된 데이터 형 데이터형의미데이터형의미 BOOL 논리형 BYTE unsigned char(8bit) DWORD unsigned long (32bit) DWORDLONG unsigned double (64bit) FLOAT float LONG signed long (32bit) LONGLONG signed double (64bit) LPARAM 32 bit 메시지 파라미터 LPCSTR 널문자로 끝나는 윈도우 문자열 상수의 포인터 LPCTSTR 널문자로 끝나는 유니코드 또는 윈도우 문자열 상수의 포인터 LPSTR 널문자로 끝나는 윈도우 문자열 포인터 LPTSTR 널문자로 끝나는 유니코드 또는 윈도우 문자열 포인터 TCHAR 유니코드 또는 윈도우 문자 UINT unsigned int(32bit) WORD unsigned short(16bit) WPARAM 16bit 메시비 파라미터

애플리케이션 프레임워크 (SDI 애플리케이션 )

프로그램 뼈대 만들기 AppWizard 이용 –MFC 의 AFX 클래스에서 상속받아 네 개의 클래스 생성 CObject CCmdTarget CWinApp CDocument CWnd CFrameWnd CView MFC 기반 클래스 CMainFrame CMyView CMyApp CMyDoc 파생 클래스

컴파일해서 실행 파일 만들기 멤버 함수 멤버 변수 private/protected 멤버

CWinApp 클래스 CWinApp 클래스의 역할 – 프로그램의 시작과 종료 담당 – 프로그램이 시작할 때, 메인 프레임 윈도우를 생성 – 무한 루프를 돌면서 메시지를 뿌려 줌. – 프로그램 전체를 대표하는 기능.

기본구조 –CWinApp 에서 상속 받은 상속받은 클래스인 CMyApp 클래스의 인스턴스를 하나 생성 – 인스턴스가 생성되면서 다음의 멤버 함수 호출 InitInstance( ); Run( ); – 무한루프를 돌면서 메시지를 뿌려주는 기능 함. –WM_QUIT 메시지를 만나면 무한 루프 탈출 ExitInstance( );

CWinApp 프로그램 시작 InitInstance( ) Run( ) ExitInstance( ) 무한 루프 프로그램 종료

CWinApp 프로그램 시작 InitInstance( ) Run( ) ExitInstance( ) 무한 루프 프로그램 종료 CMyApp 상속 InitInstance( ) ExitInstance( )

CWinApp 프로그램 시작 InitInstance( ) Run( ) ExitInstance( ) 무한 루프 프로그램 종료 CMyApp 상속 InitInstance( )

AppWizard 가 만든 소스 코드 헤더파일 class CSDIApp : public CWinApp { public: CSDIApp(); // Overrides public: virtual BOOL InitInstance();

소스파일 #include "stdafx.h" #include "SDI.h" #include "MainFrm.h" #include "SDIDoc.h" #include "SDIView.h" stdafx.h : Standard Application Frameworks MFC 클래스들의 선언 및 상수 정의, 매크로 등 MFC 를 이용하여 프로그래밍하는데 필요한 몬든 것 정의 MFC 를 사용하는 모든 소스 파일에 반드시 포함

CSDIApp::CSDIApp() { // TODO: add construction code here, // Place all significant initialization in InitInstance } CSDIApp theApp; BOOL CSDIApp::InitInstance() { //AFX 클래스인 도큐먼트 클래스, 프레임 윈도우 클래스, 뷰클래스 등록 CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CSDIDoc), RUNTIME_CLASS(CMainFrame), RUNTIME_CLASS(CSDIView)); AddDocTemplate(pDocTemplate); return TRUE; }

CWnd 클래스 화면에 츨력되어 우리 눈에 보이는 윈도우라는 오브젝트를 클래스로 구현 한 것 300 여개의 멤버 함수 포함 – 첫째, 윈도우 크기, 위치, 모양, 상태 등을 제어하기 위한 기능 제공하는 함수 100 여개의 멤버 함수지원 – 둘째, 메시지 핸들러 함수 – 윈도우에서 발생하는 메시지를 처리하기 위한 함수 200 여개 존재

CWnd 클래스 – 메세지 핸들러 함수 자주 사용하는 메시지 처리 함수 윈도우메세지 발생하는 상황메시지 핸들러 함수 WM_CREATE WM_ACTIVATE WM_COMMAND WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONBLCLK WM_KEYDOWN WM_KEYUP WM_SIZE WM_MOVE WM_TIME WM_PAINT WM_MOUSEMOVE WM_DESTROY 윈도우가 생성될때 윈도우가 활성화 / 비활성화될때 윈도우를 다시 그려야 할 때 커서가 움직였을때 사용자가 메뉴등으로 명령을 내렸을때 마우스 왼쪽버튼을 눌렀을때 마우스 왼쪽버튼을 떼었을때 마우스 왼쪽버튼이 더블클릭되었을때 키보드가 눌렸을때 키보드가 떼어졌을때 윈도우의 크기가 변경될때 윈도우가 이동될때 설정된 타이머 을때 윈도우가 없어질때 OnCreate OnActivate OnDestroy OnLButtonDown OnLBottonUp OnLButtonDblCk OnKeyDown OnKeyUp OnSize OnMove OnTimer OnPaint OnMouseMove 다른 방식으로 처리

CWnd 클래스 – 메세지핸들러 호출 원리 모든 윈도우 프로그램은 메시지 큐를 가짐. – 메모리 큐 일종의 메모리 공간 –1. 사용자가 어떤 동작을 취하면 운영체제가 프로그램에 그 동작을 알려주기 위해 메시지 큐에 메시지를 넣어줌. –2. 프로그램은 메시지 큐에서 메시지를 하나씩 꺼내 메시지를 확인하고 메시지에 해당하는 함수 호출 메시지의 종류에 따라 함수를 호출하는 것은 switch, case 문으로 구현 윈도우 메시지와 함께 추가로 들어온 정보는 메시지 함수에서 처리할 수 있도록 함수의 인자로 넘겨줌.

메시지 큐 WM_MOUSEMOVE WM_PAINT WM_ACTIVATE WM_CREATE { while(msg != WM_QUIT) { switch ( mag ) { case WM_CREATE( ) : OnCreate( ); break; case WM_ACTIVATE( ) : OnActivate( ); break; case WM_PAINT( ) : OnPaint( ); break; …… } 윈도우 운영체제 메시지 차례로 꺼내 처리

CWnd 클래스의 기본 동작 OnCreate OnActivate OnKeyDown WM_CREATE WM_ACTIVATE WM_KEYDOWN CWnd

메시지의 구조 메시지는 다음의 구조체 형식으로 되어 있음. typedef struct tagMSG { HWNDhwnd; UNITmessgae; WPARAMwParam; LPARAMlParam; DWORDtime; POINTpt; } MSG; 멤버 의미 hwnd message time pt wParam lParam 메시지가 발생한 윈도우 핸들 메시지 종류 WORD 형 (2 BYTE) 의 추가 정보 LONG 형 (2 BYTE) 의 추가 정보 메시지 발생 시각 마우스 커서의 좌표 ( 스크린 좌표계 )

메세지 핸들러 함수 오버라이딩 OnCreate OnActivate OnKeyDown WM_CREATE WM_ACTIVATE WM_KEYDOWN CWnd OnCreate OnKeyDown CMyWnd

int CMyWnd :: OnCreate(LPCREATESTRUCT lpCreateStruct) { CWnd::OnCreate(lpCreateStruct); // 수행하고자 하는 코드 입력

메시지 핸들러 오버라이딩 방법 –1. 함수를 오버라이딩하기 위해서는 그 함수가 기반 클래스에서 가상함수로 선언되어야 함. 불필요한 메모리가 더 필요 –2. 메세지 맵 이용. 오버라이딩되는 메시지 핸들러 함수만 따로 바인딩하기 위해 이용.

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_MOUSEMOVE() ON_WM_CREATE() //}}AFX_MSG_MAP END_MESSAGE_MAP( ) 메시지맵의 시작 CFrameWnd 에서 상속받은 CMainFrame 클래스메시지맵임을 나타냄 메시지맵의 끝 OnCreate 함수 오버라이딩 OnMouseMove 함수 오버라이딩 ClassWizard 에서 파싱하는 부분으로 ClassWizard 에 의해 자동 관리됨.

멤버 함수 오버라이딩 오버라이딩 가능한 함수 – 기반 클래스에서 가상함수로 선언된 함수 – 메시지 핸들러 -> ClassWizard 툴 이용 ClassWizard 기능 – 오버라이딩 가능한 함수를 객관적으로 선택할 수 있도록 함

클래스 선택 선택 클래스에서 오버라이딩 가능한 함수 목록 선택 클래스에서 오버라이딩된 함수 목록

ExitInstance 함수를 오버라이딩하는 경우 –1. MyApp.h 파일에 virtual int ExitInstance( ) 함수 선언 추가. –2. MyApp.cpp 파일에 CMyApp::ExitInstance( ) 함수를 정의하는 부분 추가.

CMainFrame 클래스의 OnActivate 함수 오버라이딩 한 경우 –1. MainFrm.h 파일에 다음 부분 추가 afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized); –2. MainFrm.cpp 파일에 CMainFrame::OnActivate 함수 정의하는 부분 추가. –3. 메시지 맵을 고쳐주는 부분 추가. ON_WM_ACTIVATE()

CFrameWnd 클래스 CFrameWnd 클래스의 역할 –1. 일반적인 윈도우로서의 역할 –2. 프레임 윈도우로서의 역할

헤더파일 (MainFrame.h) class CMainFrame : public CFrameWnd { protected: // create from serialization only CMainFrame(); DECLARE_DYNCREATE(CMainFrame) protected: CStatusBar m_wndStatusBar; CToolBar m_wndToolBar; protected: //{{AFX_MSG(CMainFrame) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); //}}AFX_MSG DECLARE_MESSAGE_MAP() };

소스파일 (MainFrm.cpp) int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; // fail to create } if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); return 0; }

CView 클래스 CView 클래스 역할 –1. 일반적인 윈도우로서의 역할 –2. 뷰 윈도우로서의 고유한 역할 프로그램에서 다루는 데이터를 보여주는 역할

헤더파일 (TestView.h) class CTestView : public CView { protected: // create from serialization only CTestView(); DECLARE_DYNCREATE(CTestView) // Attributes public: CTestDoc* GetDocument(); // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTestView) public: virtual void OnDraw(CDC* pDC); // overridden to draw this view virtual BOOL PreCreateWindow(CREATESTRUCT& cs); protected: virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo); virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo); //}}AFX_VIRTUAL };

–GetDocument( ) 도큐먼트 오브젝트의 포인터를 얻는 함수 도큐먼트에 저장되어 있는 데이터를 가져올 수 있음. –OnDraw( ) 가져온 데이터를 그리는 기능을 수행하는 함수

소스파일 (TestView.cpp) BEGIN_MESSAGE_MAP(CTestView, CView) //{{AFX_MSG_MAP(CTestView) //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP() void CTestView::OnDraw(CDC* pDC) { CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here }

// CTestView printing BOOL CTestView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing }

CDocument 클래스 CDocument 클래스의 역할 – 프로그램에서 처리하는 데이터를 저장하고, 읽어오고, 처리하는데 필요한 모든 기능을 수행하는 눈에 보이지 않는 가상적인 오브젝트 – 기능 파일로 부터 데이터 읽어오는 기능 ( 파일 – 열기 ) 파일에 데이터를 저장하는 기능 ( 파일 – 저장 ) 새로운 데이터를 만드는 기능 ( 파일 – 새파일 ) 작업중인 데이터를 닫는 기능 ( 파일 – 닫기 ) 데이터가 변경된 사실을 뷰 오브젝트에 알리는 기능

class CTestDoc : public CDocument { protected: // create from serialization only CTestDoc(); DECLARE_DYNCREATE(CTestDoc) // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTestDoc) public: virtual BOOL OnNewDocument(); virtual void Serialize(CArchive& ar); //}}AFX_VIRTUAL // Implementation public: virtual ~CTestDoc(); };

CTestDoc::CTestDoc() { // TODO: add one-time construction code here } CTestDoc::~CTestDoc() { } BOOL CTestDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; // TODO: add reinitialization code here // (SDI documents will reuse this document) return TRUE; }