42
Window Programming MFC 첫첫첫 (I)

Window Programming

  • Upload
    gefen

  • View
    81

  • Download
    0

Embed Size (px)

DESCRIPTION

Window Programming. MFC 첫걸음 (I). 목 차. MFC 란 ? 어플리케이션 프레임워크 AppWizard 를 이용한 MFC 프로그램 AppWizard 에 의해 생성된 내용 AppWizard 단계별 옵션 적용 가상함수가 MFC 에 적용되는 방식 MFC 의 계층구조. 1. MFC 란 ?. Microsoft Foundation Class MFC 는 단순한 라이브러리가 아닌 유용한 클래스들의 집합체이다 Visual C++ 이 제공하는 클래스 라이브러리가 바로 MFC 이다 - PowerPoint PPT Presentation

Citation preview

Page 1: Window Programming

Window Programming

MFC 첫걸음 (I)

Page 2: Window Programming

목 차

• MFC 란 ?• 어플리케이션 프레임워크• AppWizard 를 이용한 MFC 프로그램• AppWizard 에 의해 생성된 내용• AppWizard 단계별 옵션 적용• 가상함수가 MFC 에 적용되는 방식• MFC 의 계층구조

Page 3: Window Programming

1. MFC 란 ?

• Microsoft Foundation Class

• MFC 는 단순한 라이브러리가 아닌 유용한 클래스들의 집합체이다

• Visual C++ 이 제공하는 클래스 라이브러리가 바로 MFC 이다

• MFC 프로그래밍을 배우는 과정은 C++ 에 대한 기본 지식과 윈도우 프로그래밍에 대한 이해를 바탕으로 MFC 가 제공하는 클래스들의 종류와 가능 , 구조를 익혀나가는 과정이라 할 수 있다

• MFC 라이브러리는 윈도우 API 이외에도 OLE, ODBC, 윈속 (winsock) 관련 클래스를 포함하여 230 여개 이상의 클래스를 제공한다

Page 4: Window Programming

2. 어플리케이션 프레임워크

• Application Framework• AppWizard, ClassWizard, 워크스페이스 등과 MFC 를

유기적으로 연결하여 응용프로그램을 보다 쉽고 편리하게 만들어주는 도구이다

• 프레임워크는 프로그램구조 ( 골격 ) 자체를 정의한다

• 어플리케이션 프레임워크를 사용하여 얻는 이점– 프레임워크의 어플리케이션은 표준화된 구조를 사용한다

• 표준화된 구조에 의해 프로젝트를 나누어서 수행 가능• 유지보수 용이하다

– 프레임워크의 어플리케이션은 작고 빠르다• MFC 코드와의 동적연결 방법으로 작은 프로그램 제작가능• 최적화된 컴파일러로 만들어진 기계어는 실행속도가 빠르다

– 프레임워크를 이용하면 코딩작업이 줄어 개발기간이 단축된다• 정형화된 코드를 자동으로 생성해 주므로 코딩시간이 줄어든다

Page 5: Window Programming

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 그림 참조

Page 6: Window Programming

• 기초작업 결과

Page 7: Window Programming

3-1. MFC AppWizard : 단계 1

• 어플리케이션 유형 및 언어 설정

Page 8: Window Programming

• 어플리케이션 유형 : SDI

– 단일문서를 작업할 수 있는 어플리케이션 생성– SDI(Single Document Interface) 라고도 한다 .– 예 : 메모장 (notepad.exe)

Page 9: Window Programming

• 어플리케이션 유형 : MDI– 다중문서를 작성할 수 있는 어플리케이션 생성– MDI(Multiple Document Interface) 라고도 한다 .– 예 : 시스템 편집기 (sysedit.exe)

Page 10: Window Programming

• 어플리케이션 유형 : Dialog Based

– 다이얼로그 기반의 어플리케이션 생성– 예 : CD 재생기 (cdplayer.exe)

Page 11: Window Programming

• Document/View 구조 사용여부– Visual C++ 6.0 에 새로 추가된 옵션– MFC 의 도큐먼트 - 뷰 구조를 사용하는 어플리케이션인가 , 사용하지 않는

어플리케이션인가를 결정

• 리소스에 사용한 언어– 콤보 박스에서 사용할 리소스 언어를 선택한다 .– 한국어를 선택

Page 12: Window Programming

3-2. MFC AppWizard : 단계 2

• 데이터베이스 지원과 관련된 사항 설정

Page 13: Window Programming

• 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– 데이터베이스 지원 클래스를 포함하는 어플리케이션 생성– 동시에 도큐먼트 클래스에 파일 지원을 위한 코드가 추가됨

Page 14: Window Programming

• Data Source 버튼

– 데이터 소스 이름 (DSN) 또는 MDB 의 위치를 설정하는 다이얼로그 출력– 그림의 <OLE DB> 옵션은 Visual C++ 6.0 에 새로 추가된 것 .

Page 15: Window Programming

3-3. MFC AppWizard : 단계 3

• OLE(Object Linking&Embedding), ActiveX 와 관련된 옵션설정

실제 작업은 여기에 클릭

Page 16: Window Programming

• 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 에 새로 추가된 옵션

Page 17: Window Programming

• OLE compound file( 복합 파일 )– Yes, please

• 생성된 OLE 컨테이너 어플리케이션이 OLE 복합 파일 형식으로 데이터를 저장할 수 있게 한다 .

– No, thank you• 생성된 OLE 컨테이너 어플리케이션이 OLE 복합 파일 형식으로 데이터를 저장할 수 없게

한다 .

• 다른 기능 지원– Automation

• 자동화 기능을 지원하는 어플리케이션 생성– ActiveX Controls

• ActiveX 컨트롤을 사용할 수 있는 어플리케이션을 생성한다 .

Page 18: Window Programming

3-4. MFC AppWizard : 단계 4

• 사용자 인터페이스 , WOSA(Windows Open Services Architecture) 기능 , 파일 확장자 , 윈도우 스타일 등을 설정

Page 19: Window Programming

• 사용자 인터페이스 옵션 및 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 를 지원하기 위한 헤더파일이 추가된다 .

Page 20: Window Programming

• 툴바 형태– Normal

• Visual C++ 6.0 에서 확장된 옵션• 기본적으로 평면 툴바가 생성된다 .

– Internet Explorer ReBars• Visual C++ 6.0 에서 새로 추가된 옵션• 인터넷 익스플로러에서 사용하는 툴바 (흔히 쿨바 (coolbar)) 형태가 생성됨

• MRU file list• 최근에 사용한 파일 리스트 개수• Advanced 버튼

– 파일 확장자 , 윈도우 스타일 등을 지정한다 .

Page 21: Window Programming

• Advanced 버튼 : Document Template Strings– 작업내용

• <file extension> : “kbs” 입력• <main frame caption> : “테스트 프로그램” 입력

Page 22: Window Programming

– 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 리스트 박스에서 사용되는 파일 타입 이름을

지정한다 .

Page 23: Window Programming

• Advanced 버튼 : Window Styles– 작업내용 : 없음 ( 디폴트 내용 그대로 사용 )

Page 24: Window Programming

– 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

– 차일드 윈도우를 최대화로 활성화할 것인지의 여부를 설정

Page 25: Window Programming

3-5. MFC AppWizard : 단계 5

• 프로젝트 형식과 주석문 생성 여부 , MFC 관련 연결방법 설정

Page 26: Window Programming

• 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 없이 실행 가능하다

( 정적 링크 라이브러리 )

Page 27: Window Programming

3-6. MFC AppWizard : 단계 6

• AppWizard 에 의해 생성된 클래스명과 파일명 변경

뷰 클래스

어플리케이션 클래스

메인프레임 클래스

도큐먼트 클래스

뷰 클래스의 경우 , 간단한 텍스트 편집기를 만들기 위해 <Base class> 콤보 박스에서 <CEditView> 를 선택

리스트 박스

Page 28: Window Programming

• 리스트 박스– AppWizard 의 단계별 옵션에 따라 생성되는 클래스 항목을 나타낸다 .

• Class name– 리스트 박스에서 선택한 클래스명을 나타낸다– 필요에 따라 클래스 명을 변경할 수 있다 .

• Base class– 리스트 박스에서 선택한 클래스의 기초 클래스를 표시한다 .– 다른 클래스와는 달리 뷰 클래스의 경우 , 8개의 기초 클래스 중 , 원하는 항목을

선택할 수 있다 .– 기초 클래스 중 , CHtmlView 는 Visual C++ 6.0 에 새로 추가된 항목임

• Header class– 리스트 박스에서 선택한 클래스 헤더 파일

• Implementation file– 리스트 박스에서 선택한 클래스의 구현 파일

Page 29: Window Programming

• AppWizard 단계마다 선택한 옵션 결과 표시 다이얼로그

OK 를 클릭하면 자동으로 코드가 생성된다 .

Page 30: Window Programming

4. AppWizard 에 의해 생성된 내용

• 클래스 뷰– 프로젝트에서 사용되는 클래스 항목들이 나타난다 .

• 리소스 뷰– 프로그램에서 사용되는 다이얼로그 , 아이콘 , 메뉴 , 툴바와 같은 리소스들이

나열된다 .

• 파일 뷰– 각 클래스마다 대응되는 헤더파일과 구현파일 , 그리고 리소스 파일이 나열되어

있다 .

Page 31: Window Programming

4-1. 클래스 뷰• 4개의 클래스와 CAboutDlg 클래스가 트리구조로 나열되어

있다 .– 어플리케이션 클래스

• CTestApp– 메인프레임 클래스

• CMainFrame– 도큐먼트 클래스

• CTestDoc– 뷰 클래스

• CTestView

• : 멤버 함수• : 멤버 변수• 자물쇠 모양 : private• 열쇠 모양 : protected• 모양 없음 : public

Page 32: Window Programming

• 클래스의 계층구조 및 파생관계

CObject

CCmdTarget

CWinThread CDocument CWind CDocTemplate

CWinApp CFrameWnd CView CDialog

CTestApp CTestDoc CMainFrame CTestView CAboutDlg

Page 33: Window Programming

• 어플리케이션 클래스 역할

– 클래스 명 : CTestApp– 기초 클래스 : CWinApp– 헤더파일 / 구현파일 : Test.h/Test.cpp– 역할

• 프로그램 초기화• 메시지 루프 포함• 프로그램 종료• CDocTemplate 를 생성하여 메임 프레임 뷰 , 도큐먼트 객체와 리소스를 유기적으로

결합시켜 관리한다 .

• 메인 클래스 역할– 클래스 명 : CMainFrame– 기초 클래스 : CFrameWnd– 헤더파일 / 구현파일 : MainFrm.h/MainFrm.cpp– 역할

• 프로그램의 메인 윈도우 관리• 메뉴 , 툴바 , 상태바와 같은 비클라이언트 영역을 관리한다

Page 34: Window Programming

• 뷰 클래스 역할– 클래스 명 : CTestView– 기초 클래스 : CEditView– 헤더파일 / 구현파일 : TestView.h/TestView.cpp– 역할

• 클라이언트 영역인 뷰 윈도우 클래스 관리• 도큐먼트의 데이터를 화면이나 프린터 등에 디스플레이 한다 .

• 도큐먼트 클래스 역할– 클래스 명 : CTestDoc– 기초 클래스 : Cdocument– 헤더파일 / 구현파일 : TestDoc.h/TestDoc.cpp– 역할

• 뷰에 출력되는 데이터 보관• 디스크에 데이터 저장 및 로드

Page 35: Window Programming

4-2. 리소스 뷰• 프로그램에서 사용되는 다이얼로그 , 아이콘 , 메뉴 , 툴바와 같은 리소스들이 나열됨 .

Page 36: Window Programming

4-3. 파일 뷰• 각 클래스마다 대응되는 헤더파일과

구현파일 , 그리고 리소스 파일이 나열되어 있다 .

Page 37: Window Programming

5. AppWizard 단계별 옵션 적용• 이전의 단계에서 자동으로 모든 소스 코드가 작성되었음 .• 컴파일하고 실행파일 만들기만 남았음• 컴파일 및 실행파일 만들기 방법

– 풀다운 메뉴 [build] 에서… .• 컴파일 /링크 작업• 프로그램 실행

– Build MiniBar 에서…

컴파일 / 링크 작업 컴파일 / 링크 / 프로그램 실행

Page 38: Window Programming

• 실행파일 만들기 및 결과 : Test.exe– Test.exe 위치 : C:\WINDOWS\ 바탕 화면 \ 김장원 \Test\Debug

도킹 툴 바

상태 바

타이틀 바

Page 39: Window Programming

• AppWizard 1단계 결과– 프로그램 외형이 SDI– 리소스 ( 메뉴나 상태바에 출력되는 문자열 등 ) 에 사용되는 언어가 한글– 2,3 단계 결과 ( 데이타베이스 , OLE & ActiveX 관련 설정 ) 는 디폴트 옵션을

사용하므로 설명 생략

Page 40: Window Programming

• AppWizard 4단계 결과– 도킹 툴 바 , 상태바 생성– 인쇄작업에 필요한 기본기능 수행– Readme.txt 열기

• 위치 : C:\WINDOWS\ 바탕 화면 \ 김장원 \Test• 4단계에서 [Advanced…] 버튼 눌러 설정한 옵션 중 <file extension> 란에 입력한 “ kb

s” 는 프로그램의 디폴트 확장자이다 .• <main frame caption> 의 “테스트 프로그램”은 프로그램의 타이틀 바 문자열임• <filter name> 의 “ Test 파일 (*.kbs)” 은 열기 다이얼로그의 < 파일형식 >

콤보박스에서 볼 수 있다 .• Test 예제의 [ 파일 /열기… ] 를 실행한 결과

Page 41: Window Programming

• Readme 파일 열기

• 도킹툴바가 메뉴바 밑에 있는 결과

• 도킹 툴바가 좌측에 있는 결과 (마우스로 도킹 툴바를 드래그 & 드롭하여 위치 이동 가능 )

• 5,6 단계 생략

Page 42: Window Programming

끝• 수고하셨읍니다 .