Download presentation
Presentation is loading. Please wait.
Published by자연 추 Modified 8년 전
2
Hallym Univ MFC 개요 및 사용법 발표자 : 최 원 민 1
3
목 차목 차 MFC 의 개요 MFC 프로그램의 구조 SDI(Single Document Interface) 애플리케이션 구조 MDI(Multiple Document Interface) 애플리케이션 구조 Visual C++ 의 시작 Application Frameworks Application wizard Project workspace MFC Application architecture 2
4
도스상에서의 실행 파일 생성과정 3 Source Code (Sample.cpp) C++ Compiler Object File (Sample.obj) Linker Executable Program (Sample.exe)
5
윈도우 상에서 실행파일 생성과정 4 Developer Studio Linker Compiler Resource Compiler Source files Windows header files Windows, runtime, and MFC libraries OBJ files Runtime header files Executable (EXE) Resource file (RES) Bitmaps, icons, and other resources Resource.h Resource script file(RC) MFC header files Resource compilationCode compilation
6
MFC 의 개요 MFC(Microsoft Foundation Class) 란 ? 윈도우 애플리케이션을 작성하기 위해 만들어진 C++ 클래스 라이브러리 application framework(Afx) 를 제공함 winMain 과 같은 윈도우 애플리케이션의 기본 구조를 제공하 고 많은 작업들을 내부적으로 처리함 Win32 API 함수들을 사용함 Visual C++ 을 사용해 윈도우 프로그램을 간단하게 개 발할 수 있는 유용한 클래스 기본 Window 의 형태들을 새로 만들지 않고 MFC 를 상 속 받아 그냥 쓰면 됨 5
7
MFC 개요도 6 이미 정의된 클래스들 이미 정의된 클래스들 ……………………… ………………………………. ……………………………. ……………… 상속 AppWizard CMyApp clsss CMyDoc class CMainFrame class CMyView class 기본 골격만 갖춘 창
8
Why MFC?? 이해가 쉬움 연관된 함수와 데이타를 “ 클 래스 ” 를 이용하여 그룹화하 였음 코드의 재사용성 향상 소프트웨어 개발의 용이성 애플리케이션 프레임워크 (application framework) 제공 멤버 함수 나열 코드 삽입의 용이성 7 응용프로그램 MFC SDK API 운영체제
9
MFC 발전과정 (1/2) 8 연도개발 도구 MFC 버전 주요 특징 1992MS C 7.01.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 지원
10
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 서버 클래스 추가
11
SDI 애플리케이션의 구조 하나의 도큐먼트 프레임 윈도우만을 사용하는 프로그램 10 CWinApp 파생 클래스 CFrameWnd 파생 클래스 CView 파생 클래스 CDocument 파생 클래스
12
SDI 애플리케이션의 구조 기본 구성 클래스 CWinApp : 애플리케이션 전체를 나타냄 CFrameWnd : 애플리케이션에서 메뉴와 상태바 (status bar), 도구바 (tool bar) 를 포함한 외부 프레임을 나타냄 CView : 애플리케이션의 클라이언트 또는 작업영역을 나타냄 CDocument : 애플리케이션 내부에서 데이터를 읽고 저장하는 기능 제공 CFrameWnd, CView, CDocument 클래스가 하나의 템플릿 (CSingleDocTemplate) 으로 구 성되므로 단일 템플릿 애플리케이션이라고도 함 11
13
MDI 애플리케이션의 구조 같은 애플리케이션 인스턴스 안에 여러 개의 도 큐먼트 프레임 윈도우를 사용 가능함 12 CWinApp 파생 클래스 CMDIFrameWnd 파생 클래스 CView 파생 클래스 CDocument 파생 클래스 CMDIChildWnd 파생 클래스 CMDIChildWnd 파생 클래스
14
MDI 애플리케이션의 구조 기본 구성 클래스 CWinApp : 애플리케이션 전체를 나타냄 CMDIFrameWnd : 애플리케이션에서 메뉴와 상태바, 도구바를 포함한 외부 프레임을 나타냄 CMDIChildWnd : 애플리케이션에서 자식 윈도우의 외 부 프레임을 나타냄 CView : 애플리케이션내의 자식 윈도우의 클라이언트 혹은 작업영역을 나타냄 CDocument : 애플리케이션 내부에서 데이터를 읽고 저장하는 기능 제공 13
15
Application Frameworks(Afx) 14 CFrameWnd 윈도우의 프레임 ( 틀 ) 을 관리 CView 데이터를 보여주는 윈도우 CDocument 데이터를 저장, 처리 ( 눈에는 안보임 ) CWinApp 위의 세 오브젝트를 묶어주고, 프로그램을 구동 시킴 ( 눈에는 안보임 )
16
Afx 클래스의 계층구조 15 거의 모든 MFC 클래스의 기반 클래스 커맨드 메세지를 받는 기능 프로그램을 구동시키는 기능 데이터를 저장하고 처리하는 기능 윈도우에 관련된 기능 ( 눈에 보이는 오브젝트 ) 프로그램 윈도우 프레임 ( 외곽 ) 을 관리하는 기능 데이터를 보여주는 윈도우 관리하는 기능 CCmdTarget CWinApp CDocument CObject CWnd CFrameWnd CView
17
Application Wizard AppWiard 가 해 주는 일 MFC 의 AFX 클래스에서 상속을 받아 아래 그림과 같 이 네 개의 클래스를 생성 상속 받은 클래스에는 MFC 의 막강한 기능들이 상속 16
18
Application Wizard 17 CCmdTarget CWinApp CDocument CObject CWnd CFrameWnd CView MFC 기반 클래스 CMyApp CMyDoc CMainFrame CMyView 파생 클래스 프로젝트명 : My
19
Application Wizard 18 M F C CWinApp CFrameWnd CDocument CView C 프로젝트명 App CMainFrm C 프로젝트명 View C 프로젝트명 Doc 상 속
20
Application Wizard 19
21
Application Wizard 20
22
Application Wizard [Single document] SDI 기반의 프로젝트 만들기 [Multiple document] MDI 기반의 프로젝트 만들기 [Dialog based] 대화상자 기반의 프로젝트 만들기 [Document/View architecture support?] document 와 view 윈도우가 쌍으로 이루게 할 것인가 설 정함. 설정되지 않으면 document 가 만들어지지 않음 21
23
Application Wizard 22
24
Application Wizard [None] 제공되는 데이터베이스를 사용하지 않음 [Header files only] 데이터베이스 헤더파일만 포함됨 [Database view without file support] 데이터베이스 사용 애플리케이션의 [File] 메뉴에서 [open], [save], [close] 등을 지원하지 않음 [Database view with file support] [Data source … ] 데이터베이스 엔진과 파일을 선택함. 23
25
Application Wizard 24
26
Application Wizard OLE (Object Linking and Embedding) 응용프로그램간에 데이터를 공유할 수 있도록 해주는 기능 워드 문서 안에 엑셀에서 작성한 그래프를 삽입했을 때 그래프를 더블 클릭하면 엑셀 프로그램이 실행됨 ActiveX controls 다른 개발자나 회사에서 만들어서 제공해 주는 컨트롤. 버튼이나 콤보 박스와 같은 경우는 윈도우 운영체제에 서 제공하는 컨트롤임. 이 외에 좀 더 나은 기능의 컨트 롤이 요구됨으로써 나오는 것이 컴포넌트 (Component) 임. 25
27
Application Wizard 26
28
Application Wizard 27
29
Application Wizard 28
30
Application Wizard [MFC Standard] 일반적인 MFC 애플리케이션 작성 [Windows Explorer] 익스플로러를 포함한 웹 브라우저 기능을 가진 애플리케 이션을 작성 [As a shared DLL] MFC 라이브러리를 DLL 로 사용. 실행프로그램 크기가 작아 메모리 소비량이 적지만 프로그램 설치 시 DLL 도 함께 설치해야 함 [As a statically linked library] MFC 라이브러리를 컴파일 시 링크함. 프로그램 크기는 커지나 실행파일만으로 프로그램 구동됨 29
31
Application Wizard 30
32
Project workspace Class view 프로젝트 안에서 사용되는 클래스 들과 클래스에 정의된 멤버 변수 및 멤버 함수를 보여주는 창임 Icon 의미 31 클래스 멤버 변수 멤버 함수 private 멤버 protected 멤버
33
Project workspace Resource view Resource 란 대화상자, 메뉴, 툴 바, 아이콘 등과 같이 프로그램 을 구현하기위해 부수적으로 필 요한 자원 [Accelerator]: 단축키 정보 [String Table]: 프로젝트에서 사 용될 문자열에 대한 리스트 32
34
Project workspace File view 프로젝트에 포함된 파일들 보여줌 [Source Files]: 일반적으로 클래스 의 멤버함수를 정의한 cpp 파일들 포함 [Header Files]: 일반적으로 클래스 를 정의한 헤더 파일들 포함 [Resource Files]: 자원에 대한 정의 를 포함한 rc 파일 및 아이콘 파일, 툴바 이미지들이 포함됨 33
35
주요 MFC class 34 CObject CCmdTarget CWnd CWinThread CWinApp CFrameWnd CView CDialog CDocument [ 주요 클래스들의 계층도 ]
36
CObject 클래스 MFC 의 최상위 base class 로서 메모리에 클래 스를 설정하는 기능을 가짐 직렬화 (serialization) 지원 클래스의 객체가 디스크에 저장 가능하도록 지원하고 저장 유무를 확인 가능하도록 함 Run-time 클래스 정보 제공 현재 클래스의 상태를 확인하고 오류 정리 가능 객체의 검사 출력 클래스의 객체가 유효한지 검사 가능 Collection class 에 대한 호환성 제공 collection class 에 저장 가능한 객체는 CObject 클래스 를 상속 받은 클래스만이 가능함 35
37
CCmdTarget 클래스 MFC 의 message map architecture 를 지원하 기 위한 base 클래스 사용자 클래스를 정의할 때 윈도우 메시지에 대 한 처리가 필요한 클래스일 경우 CCmdTarget 클래스 혹은 CCmdTarget 클래스에서 파생된 클래스로부터 상속 받아야 함 모래시계 커서를 표시하는 멤버함수를 포함함 ( 어떤 명령이 처리될 때 사용자가 느낄 만큼의 시간이 소요될 경우 그 동안 화면에 모래시계 커 서를 표시하는 기능 ) 36
38
CWinThread 클래스 Multithreading 을 지원하기 위한 클래스 프로그램 실행 시 main thread 는 CWinApp 에 서 파생된 클래스에 의해 제공됨. 애플리케이션에서 여러 thread 를 실행시키고자 한다면 추가로 CWinThread 클래스의 오브젝트 가 필요함. thread 의 우선순위, thread 간의 메시지 전달, thread 의 suspend, resume 기능 제공하는 멤 버 함수를 포함함 37
39
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.
40
CWnd 클래스 화면에 출력되는 모든 윈도우의 base 클래스 윈도우를 제어하기 위한 공통 기능들이 정의된 클래스. Window procedure 와 같은 기능을 하는 멤버 함수를 제공함 어떤 메시지가 들어왔을 때, 이 메시지는 message map 을 통해 해당되는 OnMessage CWnd 멤버 함수로 전달됨. OnMessage 멤버 함수를 override 해서 사용 함으로써 애플리케이션에서 특정 메시지에 대한 처리 를 할 수 있음. 39
41
CFrameWnd 클래스 윈도우의 외곽 경계를 정의하는 클래스 윈도우 메시지를 처리하며, 가시적인 윈도우 전 체 영역을 나타냄 ( 상태바, 도구바 포함하기도 함 ) 40 CFrameWnd CMainFrame CFrameWnd CMDIFrameWnd CMDIChildWnd CMainFrame CChildWnd
42
CView 클래스 윈도우의 작업영역 ( 클라이언트 영역 ) 을 정의하 는 클래스 화면 혹은 프린터 상에 document 의 내용을 보 여주며 document 에 대한 사용자의 입력 ( 키보 드, 마우스, 메뉴, 툴바, 스크롤바 등 ) 을 처리함 41
43
CDialog 클래스 모든 대화상자의 기본 클래스 메시지를 처리할 수 있으며 여러 가지 컨트롤들 을 쉽게 사용할 수 있음 Resource editor 를 사용하여 대화상자의 폼을 디자인할 수 있음 42
44
CDocument 클래스 애플리케이션에서 사용되는 데이터를 저장하고 제어하 는 클래스 (document 의 생성, 로딩 및 저장 기능 제공 ) 애플리케이션에서 document 를 사용하는 일반적인 방 법 CDocument 의 파생 클래스를 생성 CDocument 파생 클래스에 document 의 데이터를 저장할 멤버 변 수를 추가함 document 의 데이터를 읽고 수정할 수 있는 멤버 함수를 구현. view 는 이 함수들을 이용함으로써 데이터를 사용자에게 보여줄 수 있음 데이터를 디스크에서 읽고 쓰기 위해 document 클래스의 CObject::Serialize 함수를 overriding 하여 사용 43
Similar presentations