1 / 42

Window Programming

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

gefen
Download Presentation

Window Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Window Programming MFC 첫걸음(I)

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

  3. 1. MFC란? • Microsoft Foundation Class • MFC는 단순한 라이브러리가 아닌 유용한 클래스들의 집합체이다 • Visual C++이 제공하는 클래스 라이브러리가 바로 MFC이다 • MFC프로그래밍을 배우는 과정은 C++에 대한 기본 지식과 윈도우 프로그래밍에 대한 이해를 바탕으로 MFC가 제공하는 클래스들의 종류와 가능, 구조를 익혀나가는 과정이라 할 수 있다 • MFC 라이브러리는 윈도우 API 이외에도 OLE, ODBC, 윈속(winsock)관련 클래스를 포함하여 230여개 이상의 클래스를 제공한다

  4. 2. 어플리케이션 프레임워크 • Application Framework • AppWizard, ClassWizard, 워크스페이스 등과 MFC를 유기적으로 연결하여 응용프로그램을 보다 쉽고 편리하게 만들어주는 도구이다 • 프레임워크는 프로그램구조(골격) 자체를 정의한다 • 어플리케이션 프레임워크를 사용하여 얻는 이점 • 프레임워크의 어플리케이션은 표준화된 구조를 사용한다 • 표준화된 구조에 의해 프로젝트를 나누어서 수행 가능 • 유지보수 용이하다 • 프레임워크의 어플리케이션은 작고 빠르다 • MFC 코드와의 동적연결 방법으로 작은 프로그램 제작가능 • 최적화된 컴파일러로 만들어진 기계어는 실행속도가 빠르다 • 프레임워크를 이용하면 코딩작업이 줄어 개발기간이 단축된다 • 정형화된 코드를 자동으로 생성해 주므로 코딩시간이 줄어든다

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

  6. 기초작업 결과

  7. 3-1. MFC AppWizard : 단계 1 • 어플리케이션 유형 및 언어 설정

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

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

  10. 어플리케이션 유형 : Dialog Based • 다이얼로그 기반의 어플리케이션 생성 • 예 : CD 재생기(cdplayer.exe)

  11. Document/View 구조 사용여부 • Visual C++ 6.0에 새로 추가된 옵션 • MFC의 도큐먼트-뷰 구조를 사용하는 어플리케이션인가, 사용하지 않는 어플리케이션인가를 결정 • 리소스에 사용한 언어 • 콤보 박스에서 사용할 리소스 언어를 선택한다. • 한국어를 선택

  12. 3-2. MFC AppWizard : 단계 2 • 데이터베이스 지원과 관련된 사항 설정

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

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

  15. 3-3. MFC AppWizard : 단계 3 • OLE(Object Linking&Embedding), ActiveX와 관련된 옵션설정 실제 작업은 여기에 클릭

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

  17. OLE compound file(복합 파일) • Yes, please • 생성된 OLE 컨테이너 어플리케이션이 OLE 복합 파일 형식으로 데이터를 저장할 수 있게 한다. • No, thank you • 생성된 OLE 컨테이너 어플리케이션이 OLE 복합 파일 형식으로 데이터를 저장할 수 없게 한다. • 다른 기능 지원 • Automation • 자동화 기능을 지원하는 어플리케이션 생성 • ActiveX Controls • ActiveX 컨트롤을 사용할 수 있는 어플리케이션을 생성한다.

  18. 3-4. MFC AppWizard : 단계 4 • 사용자 인터페이스, WOSA(Windows Open Services Architecture) 기능, 파일 확장자, 윈도우 스타일 등을 설정

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

  20. 툴바 형태 • Normal • Visual C++ 6.0에서 확장된 옵션 • 기본적으로 평면 툴바가 생성된다. • Internet Explorer ReBars • Visual C++ 6.0에서 새로 추가된 옵션 • 인터넷 익스플로러에서 사용하는 툴바(흔히 쿨바(coolbar)) 형태가 생성됨 • MRU file list • 최근에 사용한 파일 리스트 개수 • Advanced 버튼 • 파일 확장자, 윈도우 스타일 등을 지정한다.

  21. Advanced 버튼 : Document Template Strings • 작업내용 • <file extension> : “kbs”입력 • <main frame caption> : “테스트 프로그램” 입력

  22. 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 리스트 박스에서 사용되는 파일 타입 이름을 지정한다.

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

  24. 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 • 차일드 윈도우를 최대화로 활성화할 것인지의 여부를 설정

  25. 3-5. MFC AppWizard : 단계 5 • 프로젝트 형식과 주석문 생성 여부, MFC 관련 연결방법 설정

  26. 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 없이 실행 가능하다(정적 링크 라이브러리)

  27. 3-6. MFC AppWizard : 단계 6 • AppWizard에 의해 생성된 클래스명과 파일명 변경 뷰 클래스 어플리케이션 클래스 메인프레임 클래스 도큐먼트 클래스 리스트 박스 뷰 클래스의 경우, 간단한 텍스트 편집기를 만들기 위해 <Base class> 콤보 박스에서 <CEditView>를 선택

  28. 리스트 박스 • AppWizard의 단계별 옵션에 따라 생성되는 클래스 항목을 나타낸다. • Class name • 리스트 박스에서 선택한 클래스명을 나타낸다 • 필요에 따라 클래스 명을 변경할 수 있다. • Base class • 리스트 박스에서 선택한 클래스의 기초 클래스를 표시한다. • 다른 클래스와는 달리 뷰 클래스의 경우, 8개의 기초 클래스 중, 원하는 항목을 선택할 수 있다. • 기초 클래스 중, CHtmlView는 Visual C++ 6.0에 새로 추가된 항목임 • Header class • 리스트 박스에서 선택한 클래스 헤더 파일 • Implementation file • 리스트 박스에서 선택한 클래스의 구현 파일

  29. AppWizard 단계마다 선택한 옵션 결과 표시 다이얼로그 OK를 클릭하면 자동으로 코드가 생성된다.

  30. 4. AppWizard에 의해 생성된 내용 • 클래스 뷰 • 프로젝트에서 사용되는 클래스 항목들이 나타난다. • 리소스 뷰 • 프로그램에서 사용되는 다이얼로그, 아이콘, 메뉴, 툴바와 같은 리소스들이 나열된다. • 파일 뷰 • 각 클래스마다 대응되는 헤더파일과 구현파일, 그리고 리소스 파일이 나열되어 있다.

  31. 4-1. 클래스 뷰 • 4개의 클래스와 CAboutDlg클래스가 트리구조로 나열되어 있다. • 어플리케이션 클래스 • CTestApp • 메인프레임 클래스 • CMainFrame • 도큐먼트 클래스 • CTestDoc • 뷰 클래스 • CTestView • : 멤버 함수 • : 멤버 변수 • 자물쇠 모양 : private • 열쇠 모양 : protected • 모양 없음 : public

  32. CObject CCmdTarget • 클래스의 계층구조 및 파생관계 CWinThread CDocument CWind CDocTemplate CWinApp CFrameWnd CView CDialog CTestApp CTestDoc CMainFrame CTestView CAboutDlg

  33. 어플리케이션 클래스 역할 • 클래스 명: CTestApp • 기초 클래스: CWinApp • 헤더파일/구현파일: Test.h/Test.cpp • 역할 • 프로그램 초기화 • 메시지 루프 포함 • 프로그램 종료 • CDocTemplate를 생성하여 메임 프레임 뷰, 도큐먼트 객체와 리소스를 유기적으로 결합시켜 관리한다. • 메인 클래스 역할 • 클래스 명: CMainFrame • 기초 클래스: CFrameWnd • 헤더파일/구현파일: MainFrm.h/MainFrm.cpp • 역할 • 프로그램의 메인 윈도우 관리 • 메뉴, 툴바, 상태바와 같은 비클라이언트 영역을 관리한다

  34. 뷰 클래스 역할 • 클래스 명: CTestView • 기초 클래스: CEditView • 헤더파일/구현파일: TestView.h/TestView.cpp • 역할 • 클라이언트 영역인 뷰 윈도우 클래스 관리 • 도큐먼트의 데이터를 화면이나 프린터 등에 디스플레이 한다. • 도큐먼트 클래스 역할 • 클래스 명: CTestDoc • 기초 클래스: Cdocument • 헤더파일/구현파일: TestDoc.h/TestDoc.cpp • 역할 • 뷰에 출력되는 데이터 보관 • 디스크에 데이터 저장 및 로드

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

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

  37. 5. AppWizard 단계별 옵션 적용 • 이전의 단계에서 자동으로 모든 소스 코드가 작성되었음. • 컴파일하고 실행파일 만들기만 남았음 • 컴파일 및 실행파일 만들기 방법 • 풀다운 메뉴 [build]에서…. • 컴파일/링크 작업 • 프로그램 실행 • Build MiniBar에서… 컴파일/링크 작업 컴파일/링크/프로그램 실행

  38. 타이틀 바 • 실행파일 만들기 및 결과 : Test.exe • Test.exe 위치 : C:\WINDOWS\바탕 화면\김장원\Test\Debug 도킹 툴 바 상태 바

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

  40. AppWizard 4단계 결과 • 도킹 툴 바, 상태바 생성 • 인쇄작업에 필요한 기본기능 수행 • Readme.txt 열기 • 위치 : C:\WINDOWS\바탕 화면\김장원\Test • 4단계에서 [Advanced…] 버튼 눌러 설정한 옵션 중 <file extension>란에 입력한 “kbs”는 프로그램의 디폴트 확장자이다. • <main frame caption>의 “테스트 프로그램”은 프로그램의 타이틀 바 문자열임 • <filter name>의 “Test 파일(*.kbs)”은 열기 다이얼로그의 <파일형식> 콤보박스에서 볼 수 있다. • Test예제의 [파일/열기…]를 실행한 결과

  41. Readme파일 열기 • 도킹툴바가 메뉴바 밑에 있는 결과 • 도킹 툴바가 좌측에 있는 결과(마우스로 도킹 툴바를 드래그 & 드롭하여 위치 이동 가능) • 5,6단계 생략

  42. • 수고하셨읍니다.

More Related