제 2 장 MFC 개요 및 사용법

43
Hallym Univ 제 2 제 MFC 제제 제 제제제 제제제 : 제 제 제 1

description

제 2 장 MFC 개요 및 사용법. 발표자 : 최 원 민. 목 차. MFC 의 개요 MFC 프로그램의 구조 SDI(Single Document Interface) 애플리케이션 구조 MDI(Multiple Document Interface) 애플리케이션 구조 Visual C++ 의 시작 Application Frameworks Application wizard Project workspace MFC Application architecture. Source Code (Sample.cpp). - PowerPoint PPT Presentation

Transcript of 제 2 장 MFC 개요 및 사용법

Page 1: 제 2 장  MFC  개요 및 사용법

Hallym Univ

제 2 장 MFC 개요 및 사용법 발표자 : 최 원 민

1

Page 2: 제 2 장  MFC  개요 및 사용법

목 차

MFC 의 개요MFC 프로그램의 구조

SDI(Single Document Interface) 애플리케이션 구조 MDI(Multiple Document Interface) 애플리케이션 구조

Visual C++ 의 시작 Application Frameworks Application wizard Project workspace

MFC Application architecture

2

Page 3: 제 2 장  MFC  개요 및 사용법

도스상에서의 실행 파일 생성과정

3

Page 4: 제 2 장  MFC  개요 및 사용법

윈도우 상에서 실행파일 생성과정

4

Developer Studio

Linker

Compiler

Resource Compiler

Source files

Windows headerfiles

Windows, runtime, andMFC libraries

OBJ files

Runtime headerfiles

Executable(EXE)

Resource file(RES)

Bitmaps, icons, andother resources

Resource.h

Resourcescript file(RC)

MFC headerfiles

Resource compilationCode compilation

Page 5: 제 2 장  MFC  개요 및 사용법

MFC 의 개요MFC(Microsoft Foundation Class) 란 ?

윈도우 애플리케이션을 작성하기 위해 만들어진 C++ 클래스 라이브러리

application framework(Afx) 를 제공함• winMain 과 같은 윈도우 애플리케이션의 기본 구조를 제공하고

많은 작업들을 내부적으로 처리함 Win32 API 함수들을 사용함 Visual C++ 을 사용해 윈도우 프로그램을 간단하게

개발할 수 있는 유용한 클래스 기본 Window 의 형태들을 새로 만들지 않고 MFC 를

상속 받아 그냥 쓰면 됨

5

Page 6: 제 2 장  MFC  개요 및 사용법

MFC 개요도

6

이미 정의된 클래스들

이미 정의된 클래스들

………………………………………………………. ……………………………. ………………

상속

AppWizardCMyApp clsss

CMyDoc class

CMainFrame class

CMyView class

기본 골격만 갖춘 창

Page 7: 제 2 장  MFC  개요 및 사용법

Why MFC?? 이해가 쉬움

연관된 함수와 데이타를 “클래스”를 이용하여 그룹화하였음

코드의 재사용성 향상 소프트웨어 개발의 용이성

애플리케이션 프레임워크(application framework) 제공

멤버 함수 나열 코드 삽입의 용이성

7

응용프로그램

MFC

SDK API

운영체제

Page 8: 제 2 장  MFC  개요 및 사용법

MFC 발전과정 (1/2)

8

연도 개발 도구 MFC 버전

주요 특징

1992 MS C 7.0 1.0 16 비트 윈도우 API 를 클래스화OLE 1.0 지원

1993 비주얼 C++ 1.0 2.0 도큐먼트 /뷰 구조 도입으로 MFC 의 기본 골격 완성DDX/DDV, 사용자 인터페이스 관련 클래스 추가정적 /동적 MFC 라이브러리 지원

1993 비주얼 C++ 1.5 2.5x OLE 2.01 지원ODBC 클래스 추가

1994 비주얼 C++ 2.x 3.x 32 비트 윈도우 API 로 전환멀티스레드 지원윈속 (Winsock), MAPI 지원

Page 9: 제 2 장  MFC  개요 및 사용법

MFC 발전과정 (2/2)

9

연도 개발 도구 MFC 버전

주요 특징

1995 비주얼 C++ 4.x 4.x 공통 컨트롤 클래스 추가DAO 와 32 비트 ODBC 지원인터넷 관련 클래스 추가

1997 비주얼 C++ 5.0 4.21 ATL 추가

1998 비주얼 C++ 6.0 6.0 ATL 업그레이드여러 개의 새로운 클래스 추가 (CHtlmView, ...)OLE DB, ADO 지원 강화

2002 비주얼 C++ .NET 7.0 새로운 MFC DLL 사용 (MFC70.DLL)MFC 와 ATL 의 통합 강화사용자 인터페이스 클래스 추가유틸리티 클래스 추가ATL 서버 클래스 추가

Page 10: 제 2 장  MFC  개요 및 사용법

SDI 애플리케이션의 구조

하나의 도큐먼트 프레임 윈도우만을 사용하는 프로그램

10

CWinApp 파생 클래스CWinApp 파생 클래스

CFrameWnd 파생 클래스CFrameWnd 파생 클래스

CView 파생 클래스CView 파생 클래스

CDocument 파생 클래스

CDocument 파생 클래스

Page 11: 제 2 장  MFC  개요 및 사용법

SDI 애플리케이션의 구조기본 구성 클래스

CWinApp : 애플리케이션 전체를 나타냄 CFrameWnd : 애플리케이션에서 메뉴와 상태바 (status

bar), 도구바 (tool bar) 를 포함한 외부 프레임을 나타냄 CView : 애플리케이션의 클라이언트 또는 작업영역을

나타냄 CDocument : 애플리케이션 내부에서 데이터를 읽고

저장하는 기능 제공CFrameWnd, CView, CDocument 클래스가

하나의 템플릿 (CSingleDocTemplate) 으로 구성되므로 단일 템플릿 애플리케이션이라고도 함

11

Page 12: 제 2 장  MFC  개요 및 사용법

MDI 애플리케이션의 구조

같은 애플리케이션 인스턴스 안에 여러 개의 도큐먼트 프레임 윈도우를 사용 가능함

12

CWinApp 파생 클래스CWinApp 파생 클래스

CMDIFrameWnd 파생 클래스CMDIFrameWnd 파생 클래스

CView 파생 클래스CView 파생 클래스

CDocument 파생 클래스

CDocument 파생 클래스

CMDIChildWnd 파생 클래스

CMDIChildWnd 파생 클래스

Page 13: 제 2 장  MFC  개요 및 사용법

MDI 애플리케이션의 구조기본 구성 클래스

CWinApp : 애플리케이션 전체를 나타냄 CMDIFrameWnd : 애플리케이션에서 메뉴와 상태바 ,

도구바를 포함한 외부 프레임을 나타냄 CMDIChildWnd : 애플리케이션에서 자식 윈도우의 외부

프레임을 나타냄 CView : 애플리케이션내의 자식 윈도우의 클라이언트

혹은 작업영역을 나타냄 CDocument : 애플리케이션 내부에서 데이터를 읽고

저장하는 기능 제공

13

Page 14: 제 2 장  MFC  개요 및 사용법

Application Frameworks(Afx)

14

CFrameWnd

윈도우의 프레임 ( 틀 ) 을 관리CView

데이터를 보여주는 윈도우CDocument

데이터를 저장 , 처리 ( 눈에는 안보임 )

CWinApp위의 세 오브젝트를 묶어주고 , 프로그램을 구동 시킴 ( 눈에는 안보임 )

Page 15: 제 2 장  MFC  개요 및 사용법

Afx 클래스의 계층구조

15

거의 모든 MFC 클래스의 기반 클래스

커맨드 메세지를 받는 기능

프로그램을 구동시키는 기능

데이터를 저장하고 처리하는 기능

윈도우에 관련된 기능 ( 눈에 보이는 오브젝트 )

프로그램 윈도우 프레임 ( 외곽 ) 을 관리하는 기능

데이터를 보여주는 윈도우 관리하는 기능

CCmdTarget

CWinApp

CDocument

CObject

CWnd

CFrameWnd

CView

Page 16: 제 2 장  MFC  개요 및 사용법

Application Wizard

AppWiard 가 해 주는 일 MFC 의 AFX 클래스에서 상속을 받아 아래 그림과 같이

네 개의 클래스를 생성 상속 받은 클래스에는 MFC 의 막강한 기능들이 상속

16

CCm dTarget

CW inApp

CDocum ent

CObject

CW nd

CFram eW nd

CView

CMyApp

CMyDoc

CMainFram e

CMyView

M F C 기 반 클 래 스 파 생 클 래 스

Page 17: 제 2 장  MFC  개요 및 사용법

Application Wizard

17

CCmdTarget

CWinApp

CDocument

CObject

CWnd

CFrameWnd

CView

MFC 기반 클래스

CMyApp

CMyDoc

CMainFrame

CMyView

파생 클래스

프로젝트명 : My

Page 18: 제 2 장  MFC  개요 및 사용법

Application Wizard

18

M F C

CWinAppCWinApp CFrameWndCFrameWnd CDocumentCDocumentCViewCView

C 프로젝트명 AppC 프로젝트명 App

CMainFrmCMainFrm

C 프로젝트명 ViewC 프로젝트명 View

C 프로젝트명 DocC 프로젝트명 Doc

상 속상 속

Page 19: 제 2 장  MFC  개요 및 사용법

Application Wizard

19

Page 20: 제 2 장  MFC  개요 및 사용법

Application Wizard

20

Page 21: 제 2 장  MFC  개요 및 사용법

Application Wizard

[Single document]SDI 기반의 프로젝트 만들기

[Multiple document]MDI 기반의 프로젝트 만들기

[Dialog based]대화상자 기반의 프로젝트 만들기

[Document/View architecture support?]document 와 view 윈도우가 쌍으로 이루게 할 것인가

설정함 . 설정되지 않으면 document 가 만들어지지 않음

21

Page 22: 제 2 장  MFC  개요 및 사용법

Application Wizard

22

Page 23: 제 2 장  MFC  개요 및 사용법

Application Wizard

[None]제공되는 데이터베이스를 사용하지 않음

[Header files only]데이터베이스 헤더파일만 포함됨

[Database view without file support]데이터베이스 사용 애플리케이션의 [File] 메뉴에서[open], [save], [close] 등을 지원하지 않음

[Database view with file support][Data source…]

데이터베이스 엔진과 파일을 선택함 .

23

Page 24: 제 2 장  MFC  개요 및 사용법

Application Wizard

24

Page 25: 제 2 장  MFC  개요 및 사용법

Application Wizard

OLE (Object Linking and Embedding) 응용프로그램간에 데이터를 공유할 수 있도록 해주는 기능 워드 문서 안에 엑셀에서 작성한 그래프를 삽입했을 때

그래프를 더블 클릭하면 엑셀 프로그램이 실행됨 ActiveX controls

다른 개발자나 회사에서 만들어서 제공해 주는 컨트롤 . 버튼이나 콤보 박스와 같은 경우는 윈도우 운영체제에서 제공하는 컨트롤임 . 이 외에 좀 더 나은 기능의 컨트롤이 요구됨으로써 나오는 것이 컴포넌트 (Component) 임 .

25

Page 26: 제 2 장  MFC  개요 및 사용법

Application Wizard

26

Page 27: 제 2 장  MFC  개요 및 사용법

Application Wizard

27

Page 28: 제 2 장  MFC  개요 및 사용법

Application Wizard

28

Page 29: 제 2 장  MFC  개요 및 사용법

Application Wizard

[MFC Standard]일반적인 MFC 애플리케이션 작성

[Windows Explorer]익스플로러를 포함한 웹 브라우저 기능을 가진

애플리케이션을 작성[As a shared DLL]

MFC 라이브러리를 DLL 로 사용 . 실행프로그램 크기가 작아 메모리 소비량이 적지만 프로그램 설치 시 DLL 도 함께 설치해야 함

[As a statically linked library]MFC 라이브러리를 컴파일 시 링크함 . 프로그램 크기는

커지나 실행파일만으로 프로그램 구동됨

29

Page 30: 제 2 장  MFC  개요 및 사용법

Application Wizard

30

Page 31: 제 2 장  MFC  개요 및 사용법

Project workspace

Class view 프로젝트 안에서 사용되는

클래스들과 클래스에 정의된 멤버 변수 및 멤버 함수를 보여주는 창임

Icon 의미

31

클래스

멤버 변수

멤버 함수

private 멤버

protected 멤버

Page 32: 제 2 장  MFC  개요 및 사용법

Project workspace

Resource view Resource 란 대화상자 , 메뉴 ,

툴바 , 아이콘 등과 같이 프로그램을 구현하기위해 부수적으로 필요한 자원

[Accelerator]: 단축키 정보 [String Table]: 프로젝트에서

사용될 문자열에 대한 리스트

32

Page 33: 제 2 장  MFC  개요 및 사용법

Project workspace

File view 프로젝트에 포함된 파일들 보여줌 [Source Files]: 일반적으로 클래스의

멤버함수를 정의한 cpp 파일들 포함 [Header Files]: 일반적으로

클래스를 정의한 헤더 파일들 포함 [Resource Files]: 자원에 대한

정의를 포함한 rc 파일 및 아이콘 파일 , 툴바 이미지들이 포함됨

33

Page 34: 제 2 장  MFC  개요 및 사용법

주요 MFC class

34

CObjectCObject

CCmdTargetCCmdTarget

CWndCWndCWinThreadCWinThread

CWinAppCWinApp CFrameWndCFrameWnd CViewCViewCDialogCDialog

CDocumentCDocument

[ 주요 클래스들의 계층도 ]

Page 35: 제 2 장  MFC  개요 및 사용법

CObject 클래스MFC 의 최상위 base class 로서 메모리에

클래스를 설정하는 기능을 가짐직렬화 (serialization) 지원

클래스의 객체가 디스크에 저장 가능하도록 지원하고 저장 유무를 확인 가능하도록 함

Run-time 클래스 정보 제공 현재 클래스의 상태를 확인하고 오류 정리 가능

객체의 검사 출력 클래스의 객체가 유효한지 검사 가능

Collection class 에 대한 호환성 제공 collection class 에 저장 가능한 객체는 CObject

클래스를 상속 받은 클래스만이 가능함

35

Page 36: 제 2 장  MFC  개요 및 사용법

CCmdTarget 클래스MFC 의 message map architecture 를

지원하기 위한 base 클래스사용자 클래스를 정의할 때 윈도우 메시지에 대한

처리가 필요한 클래스일 경우 CCmdTarget 클래스 혹은 CCmdTarget 클래스에서 파생된 클래스로부터 상속 받아야 함

모래시계 커서를 표시하는 멤버함수를 포함함 ( 어떤 명령이 처리될 때 사용자가 느낄 만큼의 시간이 소요될 경우 그 동안 화면에 모래시계 커서를 표시하는 기능 )

36

Page 37: 제 2 장  MFC  개요 및 사용법

CWinThread 클래스Multithreading 을 지원하기 위한 클래스프로그램 실행 시 main thread 는 CWinApp

에서 파생된 클래스에 의해 제공됨 . 애플리케이션에서 여러 thread 를 실행시키고자

한다면 추가로 CWinThread 클래스의 오브젝트가 필요함 .

thread 의 우선순위 , thread 간의 메시지 전달 , thread 의 suspend, resume 기능 제공하는 멤버 함수를 포함함

37

Page 38: 제 2 장  MFC  개요 및 사용법

CWinApp 클래스

Windows application object 를 생성하기 위한 base class 로서 application 을 초기화 하고 실행시키기 위한 멤버함수를 제공함 .

MFC 를 사용하는 애플리케이션에는 하나의 CWinApp 파생 object 를 가짐 .

38

Note   Names shown in bold type in this documentation indicate elements supplied by the MFClass Library and Visual C++. Names shown in monospaced type indicate elements that you create or override.

<Sequence of Execution>

Page 39: 제 2 장  MFC  개요 및 사용법

CWnd 클래스화면에 출력되는 모든 윈도우의 base 클래스윈도우를 제어하기 위한 공통 기능들이 정의된

클래스 . Window procedure 와 같은 기능을 하는 멤버

함수를 제공함 어떤 메시지가 들어왔을 때 , 이 메시지는 message map

을 통해 해당되는 OnMessage CWnd 멤버 함수로 전달됨 . OnMessage 멤버 함수를 override 해서 사용함으로써 애플리케이션에서 특정 메시지에 대한 처리를 할 수 있음 .

39

Page 40: 제 2 장  MFC  개요 및 사용법

CFrameWnd 클래스

윈도우의 외곽 경계를 정의하는 클래스윈도우 메시지를 처리하며 , 가시적인 윈도우 전체

영역을 나타냄 ( 상태바 , 도구바 포함하기도 함 )

40

CFrameWndCFrameWnd

CMainFrameCMainFrame

CFrameWndCFrameWnd

CMDIFrameWndCMDIFrameWnd CMDIChildWndCMDIChildWnd

CMainFrameCMainFrame CChildWndCChildWnd

<SDI 프로젝트 > <MDI 프로젝트 >

Page 41: 제 2 장  MFC  개요 및 사용법

CView 클래스윈도우의 작업영역 ( 클라이언트 영역 ) 을 정의하는

클래스화면 혹은 프린터 상에 document 의 내용을

보여주며 document 에 대한 사용자의 입력 (키보드 , 마우스 , 메뉴 , 툴바 , 스크롤바 등 ) 을 처리함

41

Page 42: 제 2 장  MFC  개요 및 사용법

CDialog 클래스모든 대화상자의 기본 클래스메시지를 처리할 수 있으며 여러 가지 컨트롤들을

쉽게 사용할 수 있음Resource editor 를 사용하여 대화상자의 폼을

디자인할 수 있음

42

Page 43: 제 2 장  MFC  개요 및 사용법

CDocument 클래스 애플리케이션에서 사용되는 데이터를 저장하고 제어하는

클래스 (document 의 생성 , 로딩 및 저장 기능 제공 ) 애플리케이션에서 document 를 사용하는 일반적인 방법

CDocument 의 파생 클래스를 생성 CDocument 파생 클래스에 document 의 데이터를 저장할 멤버

변수를 추가함 document 의 데이터를 읽고 수정할 수 있는 멤버 함수를 구현 . view

는 이 함수들을 이용함으로써 데이터를 사용자에게 보여줄 수 있음 데이터를 디스크에서 읽고 쓰기 위해 document 클래스의

CObject::Serialize 함수를 overriding 하여 사용

43