420 likes | 655 Views
Window Programming. MFC 첫걸음 (I). 목 차. MFC 란 ? 어플리케이션 프레임워크 AppWizard 를 이용한 MFC 프로그램 AppWizard 에 의해 생성된 내용 AppWizard 단계별 옵션 적용 가상함수가 MFC 에 적용되는 방식 MFC 의 계층구조. 1. MFC 란 ?. Microsoft Foundation Class MFC 는 단순한 라이브러리가 아닌 유용한 클래스들의 집합체이다 Visual C++ 이 제공하는 클래스 라이브러리가 바로 MFC 이다
E N D
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 CWind CDocTemplate CWinApp CFrameWnd CView CDialog CTestApp CTestDoc CMainFrame 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단계 생략
끝 • 수고하셨읍니다.