01_MFC첫걸음1

Download Report

Transcript 01_MFC첫걸음1

Window Programming
MFC 첫걸음(I)
목 차
•
•
•
•
•
•
•
MFC란?
어플리케이션 프레임워크
AppWizard를 이용한 MFC 프로그램
AppWizard에 의해 생성된 내용
AppWizard 단계별 옵션 적용
가상함수가 MFC에 적용되는 방식
MFC의 계층구조
1. MFC란?
• Microsoft Foundation Class
• MFC는 단순한 라이브러리가 아닌 유용한 클래스들의 집합체이
다
• Visual C++이 제공하는 클래스 라이브러리가 바로 MFC이다
• MFC프로그래밍을 배우는 과정은 C++에 대한 기본 지식과 윈
도우 프로그래밍에 대한 이해를 바탕으로 MFC가 제공하는 클
래스들의 종류와 가능, 구조를 익혀나가는 과정이라 할 수 있다
• MFC 라이브러리는 윈도우 API 이외에도 OLE, ODBC, 윈속
(winsock)관련 클래스를 포함하여 230여개 이상의 클래스를 제
공한다
2. 어플리케이션 프레임워크
• Application Framework
• AppWizard, ClassWizard, 워크스페이스 등과 MFC를 유기적으
로 연결하여 응용프로그램을 보다 쉽고 편리하게 만들어주는
도구이다
• 프레임워크는 프로그램구조(골격) 자체를 정의한다
• 어플리케이션 프레임워크를 사용하여 얻는 이점
– 프레임워크의 어플리케이션은 표준화된 구조를 사용한다
• 표준화된 구조에 의해 프로젝트를 나누어서 수행 가능
• 유지보수 용이하다
– 프레임워크의 어플리케이션은 작고 빠르다
• MFC 코드와의 동적연결 방법으로 작은 프로그램 제작가능
• 최적화된 컴파일러로 만들어진 기계어는 실행속도가 빠르다
– 프레임워크를 이용하면 코딩작업이 줄어 개발기간이 단축된다
• 정형화된 코드를 자동으로 생성해 주므로 코딩시간이 줄어든다
3. AppWizard를 이용한 MFC 프로그래밍
• 간단한 텍스트 편집기 만들기 : 메모장
• AppWizard를 사용하여 작성됨
• 목적 : AppWizard의 단계별 옵션과 자동으로 생성된 파일, 소
스코드를 익히기 위함
• 기초작업
– 바탕화면에 자기 이름으로 된 폴더를 만든다( 예 : “김장원”)
– Win32용 어플리케이션 환경 설정
•
•
•
•
•
•
•
바탕화면에서 VC++ 6.0 아이콘을 더블클릭한다.
[File/New…] -> Project 탭 -> <MFC AppWizard[exe]>를 선택
Project name : Test
Location : C:\WINDOWS\바탕화면\김장원(여러분의 이름)
Platforms : Win32에 체크
Create new workspace에 체크
교재 53page 그림 참조
• 기초작업 결과
3-1. MFC AppWizard : 단계 1
• 어플리케이션 유형 및 언어 설정
• 어플리케이션 유형 : SDI
– 단일문서를 작업할 수 있는 어플리케이션 생성
– SDI(Single Document Interface)라고도 한다.
– 예 : 메모장(notepad.exe)
• 어플리케이션 유형 : MDI
– 다중문서를 작성할 수 있는 어플리케이션 생성
– MDI(Multiple Document Interface)라고도 한다.
– 예 : 시스템 편집기(sysedit.exe)
• 어플리케이션 유형 : Dialog Based
– 다이얼로그 기반의 어플리케이션 생성
– 예 : CD 재생기(cdplayer.exe)
• Document/View 구조 사용여부
– Visual C++ 6.0에 새로 추가된 옵션
– MFC의 도큐먼트-뷰 구조를 사용하는 어플리케이션인가, 사용하지 않는 어플리
케이션인가를 결정
• 리소스에 사용한 언어
– 콤보 박스에서 사용할 리소스 언어를 선택한다.
– 한국어를 선택
3-2. MFC AppWizard : 단계 2
• 데이터베이스 지원과 관련된 사항 설정
• None
– 데이터베이스를 지원하지 않는 어플리케이션 생성
• Header files only
–
–
–
–
데이터베이스를 사용할 수 있도록 헤더파일만 추가됨
원하는 클래스는 직접 추가해서 사용해야 함
ODBC를 사용할 경우 afxdb.h
DOA를 사용할 경우 afxdoa.h
• Database view without file support
– 데이터베이스 지원 클래스를 포함하는 어플리케이션 생성
– 단, 파일 지원을 위한 코드는 추가되지 않는다.
– 데이터베이스 지원이란?
• ODBC를 사용할 때, CRecordView와 CRecordSet에서 파생되는 클래스
• DAO를 사용할 때, CDaoRecordView와 CDaoRecordSet에서 파생되는 클래스
• Database view with support
– 데이터베이스 지원 클래스를 포함하는 어플리케이션 생성
– 동시에 도큐먼트 클래스에 파일 지원을 위한 코드가 추가됨
• Data Source 버튼
– 데이터 소스 이름(DSN) 또는 MDB의 위치를 설정하는 다이얼로그 출력
– 그림의 <OLE DB> 옵션은 Visual C++ 6.0에 새로 추가된 것.
3-3. MFC AppWizard : 단계 3
• OLE(Object Linking&Embedding), ActiveX와 관련된 옵션설정
실제 작업은 여기에 클릭
• OLE compound document(복합문서) 설정
– None
• OLE를 지원하지 않는 어플리케이션 생성
– Container
• OLE 컨테이너 어플리케이션 지원
– Mini-server
• OLE 복합문서를 생성하고 관리하는 OLE 서버 어플리케이션 생성
• 단, 독립적으로 실행이 되지 않는다(컨테이너 프로그램 내에서만 수행됨)
– Full container and server
• OLE 복합문서를 생성하고 관리하는 OLE 서버 어플리케이션 생성
• Mini-server와 다른 점은 독립적으로 실행됨
– Both container and server
• OLE 컨테이너와 서버역할을 동시에 하는 어플리케이션을 생성한다
• Active document server
– ActiveX 문서를 만드는 서버 어플리케이션 생성
– 이 어플리케이션에서 생성된 문서는 익스플로러 3.0 이상에서 활성화된다.
• Active document container
– ActiveX 문서를 출력하는 컨테이너 어플리케이션을 생성
– Visual C++ 6.0에 새로 추가된 옵션
• OLE compound file(복합 파일)
– Yes, please
• 생성된 OLE 컨테이너 어플리케이션이 OLE 복합 파일 형식으로 데이터를 저장할 수
있게 한다.
– No, thank you
• 생성된 OLE 컨테이너 어플리케이션이 OLE 복합 파일 형식으로 데이터를 저장할 수
없게 한다.
• 다른 기능 지원
– Automation
• 자동화 기능을 지원하는 어플리케이션 생성
– ActiveX Controls
• ActiveX 컨트롤을 사용할 수 있는 어플리케이션을 생성한다.
3-4. MFC AppWizard : 단계 4
• 사용자 인터페이스, WOSA(Windows Open Services
Architecture) 기능, 파일 확장자, 윈도우 스타일 등을 설정
• 사용자 인터페이스 옵션 및 WOSA
– Docking toolbar
• 도킹 툴바를 생성
– Initial status bar
• 상태바 생성
– Printing and print preview
• 파일 메뉴에 인쇄와 미리보기 메뉴가 추가되고 관련 코드가 생성
– Context-sensitive Help
• 문맥 감지형 도움말을 지원하는 도움말 파일이 생성
– 3D controls
• 원도우즈 95 이상에서 볼 수 있는 다이얼로그 형태를 사용.
• 이 옵션을 설정하지 않으면 윈도우 3.1의 다이얼로그 형태로 출력된다.
– MAPI
• Messaging API를 지원하기 위한 헤더파일이 추가되고, 파일 메뉴에 Send(편지보내기)
메뉴와 관련코드가 생성
– Windows Sockets
• Winsocket API를 지원하기 위한 헤더파일이 추가된다.
• 툴바 형태
– Normal
• Visual C++ 6.0에서 확장된 옵션
• 기본적으로 평면 툴바가 생성된다.
– Internet Explorer ReBars
• Visual C++ 6.0에서 새로 추가된 옵션
• 인터넷 익스플로러에서 사용하는 툴바(흔히 쿨바(coolbar)) 형태가 생성됨
• MRU file list
• 최근에 사용한 파일 리스트 개수
• Advanced 버튼
– 파일 확장자, 윈도우 스타일 등을 지정한다.
• Advanced 버튼 : Document Template Strings
– 작업내용
• <file extension> : “kbs” 입력
• <main frame caption> : “테스트 프로그램” 입력
– File extension
• 프로그램에서 사용할 파일 확장자 지정
– File type ID
• 레지스트리에서 사용되는 파일 타입 ID를 지정
– Main frame caption
• 어플리케이션의 캡션바에 출력될 제목을 지정
– Doc type name
• 새로운 도큐먼트 템플릿이 추가되면 [File/New] 메뉴 항목을 선택했을 때, 다이얼로그가 출력되는
데 이때 사용되는 도큐먼트 타입 이름을 지정한다.
– Filter name
• 파일 열기(Open)나 다른 이름으로 저장(Save As) 다이얼로그의 파일 형식 콤보 박스에 출력될 문
자열을 지정한다.
– File new name
• OLE 서버 어플리케이션에서는 OLE Object의 짧은 이름으로 사용된다.
• 하나 이상의 도큐먼트 템플릿을 사용하는 어플리케이션에서는 [File/New] 메뉴를 선택했을 때 출
력되는 다이얼로그의 리스트 항목으로 사용된다.
– File type name
• 객체 삽입(Insert Object) 다이얼로그의 Object type 리스트 박스에서 사용되는 파일 타입 이름을
지정한다.
• Advanced 버튼 : Window Styles
– 작업내용 : 없음(디폴트 내용 그대로 사용)
– Use split window : 분할 윈도우의 사용 여부를 설정
– Main frame styles
• Thick frame
– 메인 프레임 윈도우의 크기를 조절할 수 있는지의 여부를 설정
• System menu
– 메인 윈도우의 시스템 메뉴 사용 여부를 설정
• Minimize box
– 메인 윈도우에서 아이콘화 버튼의 사용 여부를 설정
• Minimized
– 메인 윈도우를 아이콘화로 활성화할 것인지의 여부를 설정
• Maximize box
– 메인 윈도우에서 최대화 버튼의 사용 여부를 설정
• Maximized
– 메인 윈도우를 최대화로 활성화할 것인지의 여부를 설정
– MDI child frame styles
• Thick frame
– 차일드 프레임 윈도우의 크기를 조절할 수 있는지의 여부를 설정
• Minimize box
– 차일드 윈도우에서 아이콘화 버튼의 사용 여부를 설정
• Minimized
– 차일드 윈도우를 아이콘화로 활성화할 것인지의 여부를 설정
• Maximize box
– 차일드 윈도우에서 최대화 버튼의 사용 여부를 설정
• Maximized
– 차일드 윈도우를 최대화로 활성화할 것인지의 여부를 설정
3-5. MFC AppWizard : 단계 5
• 프로젝트 형식과 주석문 생성 여부, MFC 관련 연결방법 설정
• Project style
– MFC Standard
• 기존의 Visual C++ 5.0의 형식을 따른다.
– Windows Expolorer
• Visual C++ 6.0에 새로 추가된 옵션
• 윈도우 탐색기와 같은 정적 분할윈도우가 생성
• Comments
– Yes, please
• AppWizard에 의해 생성된 소스코드에 주석문을 추가한다
– No, thank you
• AppWizard에 의해 생성된 소스코드에 주석문을 추가하지 않는다
• MFC library
– As a shard DLL
• 어플리케이션에 링크할 MFC 라이브러리를 지정하는데 있어 공유 DLL을 사용하면
EXE의 크기가 작아지는 대신 별도의 DLL을 EXE와 함께 배포해야 한다(공유 DLL)
– As a statically linked library
• 라이브러리가 EXE에 포함되므로 EXE가 커지는 대신 별도의 DLL 없이 실행 가능하다
(정적 링크 라이브러리)
3-6. MFC AppWizard : 단계 6
• AppWizard에 의해 생성된 클래스명과 파일명 변경
뷰 클래스
리스트 박스
어플리케이션 클래스
메인프레임 클래스
도큐먼트 클래스
뷰 클래스의 경우, 간단한 텍
스트 편집기를 만들기 위해
<Base class> 콤보 박스에
서 <CEditView>를 선택
• 리스트 박스
– AppWizard의 단계별 옵션에 따라 생성되는 클래스 항목을 나타낸다.
• Class name
– 리스트 박스에서 선택한 클래스명을 나타낸다
– 필요에 따라 클래스 명을 변경할 수 있다.
• Base class
– 리스트 박스에서 선택한 클래스의 기초 클래스를 표시한다.
– 다른 클래스와는 달리 뷰 클래스의 경우, 8개의 기초 클래스 중, 원하는 항목을
선택할 수 있다.
– 기초 클래스 중, CHtmlView는 Visual C++ 6.0에 새로 추가된 항목임
• Header class
– 리스트 박스에서 선택한 클래스 헤더 파일
• Implementation file
– 리스트 박스에서 선택한 클래스의 구현 파일
• AppWizard 단계마다 선택한 옵션 결과 표시 다이얼로그
OK를 클릭하면 자동으로
코드가 생성된다.
4. AppWizard에 의해 생성된 내용
• 클래스 뷰
– 프로젝트에서 사용되는 클래스 항목들이 나타난다.
• 리소스 뷰
– 프로그램에서 사용되는 다이얼로그, 아이콘, 메뉴, 툴바와 같은 리소스들이 나열
된다.
• 파일 뷰
– 각 클래스마다 대응되는 헤더파일과 구현파일, 그리고 리소스 파일이 나열되어
있다.
4-1. 클래스 뷰
• 4개의 클래스와 CAboutDlg클래스가 트리구조로 나열되어 있다.
– 어플리케이션 클래스
• CTestApp
– 메인프레임 클래스
• CMainFrame
– 도큐먼트 클래스
• CTestDoc
– 뷰 클래스
• CTestView
•
: 멤버 함수
•
: 멤버 변수
• 자물쇠 모양 : private
• 열쇠 모양 : protected
• 모양 없음 : public
• 클래스의 계층구조 및 파생관계
CObject
CCmdTarget
CWinThread
CDocument
CWinApp
CTestApp
CFrameWnd
CTestDoc
CMainFrame
CWind
CDocTemplate
CView
CDialog
CTestView
CAboutDlg
• 어플리케이션 클래스 역할
–
–
–
–
클래스 명 : CTestApp
기초 클래스 : CWinApp
헤더파일/구현파일 : Test.h/Test.cpp
역할
•
•
•
•
프로그램 초기화
메시지 루프 포함
프로그램 종료
CDocTemplate를 생성하여 메임 프레임 뷰, 도큐먼트 객체와 리소스를 유기적으로 결
합시켜 관리한다.
• 메인 클래스 역할
–
–
–
–
클래스 명 : CMainFrame
기초 클래스 : CFrameWnd
헤더파일/구현파일 : MainFrm.h/MainFrm.cpp
역할
• 프로그램의 메인 윈도우 관리
• 메뉴, 툴바, 상태바와 같은 비클라이언트 영역을 관리한다
• 뷰 클래스 역할
–
–
–
–
클래스 명 : CTestView
기초 클래스 : CEditView
헤더파일/구현파일 : TestView.h/TestView.cpp
역할
• 클라이언트 영역인 뷰 윈도우 클래스 관리
• 도큐먼트의 데이터를 화면이나 프린터 등에 디스플레이 한다.
• 도큐먼트 클래스 역할
–
–
–
–
클래스 명 : CTestDoc
기초 클래스 : Cdocument
헤더파일/구현파일 : TestDoc.h/TestDoc.cpp
역할
• 뷰에 출력되는 데이터 보관
• 디스크에 데이터 저장 및 로드
4-2. 리소스 뷰
• 프로그램에서 사용되는 다이얼로그, 아이콘, 메뉴, 툴바와 같은
리소스들이 나열됨.
4-3. 파일 뷰
• 각 클래스마다 대응되는
헤더파일과 구현파일,
그리고 리소스 파일이
나열되어 있다.
5. AppWizard 단계별 옵션 적용
• 이전의 단계에서 자동으로 모든 소스 코드가 작성되었음.
• 컴파일하고 실행파일 만들기만 남았음
• 컴파일 및 실행파일 만들기 방법
– 풀다운 메뉴 [build]에서….
• 컴파일/링크 작업
• 프로그램 실행
– Build MiniBar에서…
컴파일/링크 작업
컴파일/링크/프로그램 실행
• 실행파일 만들기 및 결과 : Test.exe
– Test.exe 위치 : C:\WINDOWS\바탕 화면\김장원\Test\Debug
타이틀 바
도킹 툴 바
상태 바
• AppWizard 1단계 결과
– 프로그램 외형이 SDI
– 리소스(메뉴나 상태바에 출력되는 문자열 등)에 사용되는 언어가 한글
– 2,3단계 결과(데이타베이스, OLE & ActiveX 관련 설정)는 디폴트 옵션을 사용하
므로 설명 생략
• AppWizard 4단계 결과
– 도킹 툴 바, 상태바 생성
– 인쇄작업에 필요한 기본기능 수행
– Readme.txt 열기
• 위치 : C:\WINDOWS\바탕 화면\김장원\Test
• 4단계에서 [Advanced…] 버튼 눌러 설정한 옵션 중 <file extension>란에 입력한
“kbs”는 프로그램의 디폴트 확장자이다.
• <main frame caption>의 “테스트 프로그램”은 프로그램의 타이틀 바 문자열임
• <filter name>의 “Test 파일(*.kbs)”은 열기 다이얼로그의 <파일형식> 콤보박스에서
볼 수 있다.
• Test예제의 [파일/열기…]를 실행한 결과
• Readme파일 열기
• 도킹툴바가 메뉴바 밑에
있는 결과
• 도킹 툴바가 좌측에 있는
결과(마우스로 도킹 툴바를
드래그 & 드롭하여
위치 이동 가능)
• 5,6단계 생략
끝
• 수고하셨읍니다.