1 / 43

제 2 장 MFC 개요 및 사용법

제 2 장 MFC 개요 및 사용법. 발표자 : 최 원 민. 목 차. MFC 의 개요 MFC 프로그램의 구조 SDI(Single Document Interface) 애플리케이션 구조 MDI(Multiple Document Interface) 애플리케이션 구조 Visual C++ 의 시작 Application Frameworks Application wizard Project workspace MFC Application architecture. Source Code (Sample.cpp).

Télécharger la présentation

제 2 장 MFC 개요 및 사용법

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. 제2장 MFC 개요 및 사용법 발표자 : 최 원 민

  2. 목 차 • MFC의 개요 • MFC 프로그램의 구조 • SDI(Single Document Interface)애플리케이션 구조 • MDI(Multiple Document Interface)애플리케이션 구조 • Visual C++의 시작 • Application Frameworks • Application wizard • Project workspace • MFC Application architecture

  3. Source Code (Sample.cpp) C++ Compiler Object File (Sample.obj) Linker Executable Program (Sample.exe) 도스상에서의 실행 파일 생성과정

  4. Developer Studio Code compilation Resource compilation Windows header files Source files Resource script file(RC) Resource.h Runtime header files Bitmaps, icons, and other resources MFC header files Resource Compiler Resource file (RES) Compiler OBJ files Windows, runtime, and MFC libraries Executable (EXE) Linker 윈도우 상에서 실행파일 생성과정

  5. MFC의 개요 • MFC(Microsoft Foundation Class)란? • 윈도우 애플리케이션을 작성하기 위해 만들어진 C++ 클래스 라이브러리 • application framework(Afx)를 제공함 • winMain과 같은 윈도우 애플리케이션의 기본 구조를 제공하고 많은 작업들을 내부적으로 처리함 • Win32 API 함수들을 사용함 • Visual C++을 사용해 윈도우 프로그램을 간단하게 개발할 수 있는 유용한 클래스 • 기본 Window의 형태들을 새로 만들지 않고 MFC를 상속 받아 그냥 쓰면 됨

  6. 상속 AppWizard 기본 골격만 갖춘 창 CMyApp clsss CMyDoc class CMainFrame class CMyView class MFC 개요도 ……………………… ………………………………. ……………………………. ……………… 이미 정의된 클래스들

  7. Why MFC?? • 이해가 쉬움 • 연관된 함수와 데이타를 “클래스”를 이용하여 그룹화하였음 • 코드의 재사용성 향상 • 소프트웨어 개발의 용이성 • 애플리케이션 프레임워크(application framework) 제공 • 멤버 함수 나열 • 코드 삽입의 용이성 응용프로그램 MFC SDK API 운영체제

  8. MFC 발전과정 (1/2)

  9. MFC 발전과정 (2/2)

  10. CWinApp 파생 클래스 CFrameWnd 파생 클래스 CView 파생 클래스 CDocument 파생 클래스 SDI 애플리케이션의 구조 • 하나의 도큐먼트 프레임 윈도우만을 사용하는 프로그램

  11. SDI 애플리케이션의 구조 • 기본 구성 클래스 • CWinApp : 애플리케이션 전체를 나타냄 • CFrameWnd : 애플리케이션에서 메뉴와 상태바(status bar), 도구바(tool bar)를 포함한 외부 프레임을 나타냄 • CView : 애플리케이션의 클라이언트 또는 작업영역을 나타냄 • CDocument : 애플리케이션 내부에서 데이터를 읽고 저장하는 기능 제공 • CFrameWnd, CView, CDocument 클래스가 하나의 템플릿(CSingleDocTemplate)으로 구성되므로 단일 템플릿 애플리케이션이라고도 함

  12. CWinApp 파생 클래스 CMDIFrameWnd 파생 클래스 CMDIChildWnd 파생 클래스 CView 파생 클래스 CDocument 파생 클래스 MDI 애플리케이션의 구조 • 같은 애플리케이션 인스턴스 안에 여러 개의 도큐먼트 프레임 윈도우를 사용 가능함

  13. MDI 애플리케이션의 구조 • 기본 구성 클래스 • CWinApp : 애플리케이션 전체를 나타냄 • CMDIFrameWnd : 애플리케이션에서 메뉴와 상태바, 도구바를 포함한 외부 프레임을 나타냄 • CMDIChildWnd : 애플리케이션에서 자식 윈도우의 외부 프레임을 나타냄 • CView : 애플리케이션내의 자식 윈도우의 클라이언트 혹은 작업영역을 나타냄 • CDocument : 애플리케이션 내부에서 데이터를 읽고 저장하는 기능 제공

  14. CFrameWnd CDocument CView 데이터를 저장, 처리 (눈에는 안보임) 윈도우의프레임(틀)을 관리 데이터를 보여주는 윈도우 CWinApp 위의 세 오브젝트를 묶어주고, 프로그램을 구동 시킴 (눈에는 안보임) Application Frameworks(Afx)

  15. CObject CCmdTarget CWinApp CDocument CWnd CFrameWnd CView Afx 클래스의 계층구조 거의 모든 MFC 클래스의 기반 클래스 커맨드 메세지를 받는 기능 프로그램을 구동시키는 기능 데이터를 저장하고 처리하는 기능 윈도우에 관련된 기능 (눈에 보이는 오브젝트) 프로그램 윈도우 프레임(외곽)을 관리하는 기능 데이터를 보여주는 윈도우 관리하는 기능

  16. Application Wizard • AppWiard가 해 주는 일 • MFC의 AFX 클래스에서 상속을 받아 아래 그림과 같이 네 개의 클래스를 생성 • 상속 받은 클래스에는 MFC의 막강한 기능들이 상속

  17. MFC 기반 클래스 파생 클래스 CObject CCmdTarget CWinApp CMyApp CDocument CMyDoc CWnd CFrameWnd CMainFrame CView CMyView Application Wizard 프로젝트명 : My

  18. M F C 상 속 Application Wizard CWinApp CFrameWnd CView CDocument C프로젝트명App C프로젝트명View CMainFrm C프로젝트명Doc

  19. Application Wizard

  20. Application Wizard

  21. Application Wizard [Single document] SDI 기반의 프로젝트 만들기 [Multiple document] MDI 기반의 프로젝트 만들기 [Dialog based] 대화상자 기반의 프로젝트 만들기 [Document/View architecture support?] document와 view 윈도우가 쌍으로 이루게 할 것인가 설정함. 설정되지 않으면 document가 만들어지지 않음

  22. Application Wizard

  23. Application Wizard [None] 제공되는 데이터베이스를 사용하지 않음 [Header files only] 데이터베이스 헤더파일만 포함됨 [Database view without file support] 데이터베이스 사용 애플리케이션의 [File]메뉴에서 [open], [save], [close] 등을 지원하지 않음 [Database view with file support] [Data source…] 데이터베이스 엔진과 파일을 선택함.

  24. Application Wizard

  25. Application Wizard • OLE (Object Linking and Embedding) • 응용프로그램간에 데이터를 공유할 수 있도록 해주는 기능 • 워드 문서 안에 엑셀에서 작성한 그래프를 삽입했을 때 그래프를 더블 클릭하면 엑셀 프로그램이 실행됨 • ActiveX controls • 다른 개발자나 회사에서 만들어서 제공해 주는 컨트롤. 버튼이나 콤보 박스와 같은 경우는 윈도우 운영체제에서 제공하는 컨트롤임. 이 외에 좀 더 나은 기능의 컨트롤이 요구됨으로써 나오는 것이 컴포넌트(Component)임.

  26. Application Wizard

  27. Application Wizard

  28. Application Wizard

  29. Application Wizard [MFC Standard] 일반적인 MFC 애플리케이션 작성 [Windows Explorer] 익스플로러를 포함한 웹 브라우저 기능을 가진 애플리케이션을 작성 [As a shared DLL] MFC 라이브러리를 DLL로 사용. 실행프로그램 크기가 작아 메모리 소비량이 적지만 프로그램 설치 시 DLL도 함께 설치해야 함 [As a statically linked library] MFC 라이브러리를 컴파일 시 링크함. 프로그램 크기는 커지나 실행파일만으로 프로그램 구동됨

  30. Application Wizard

  31. 클래스 멤버 변수 멤버 함수 private 멤버 protected 멤버 Project workspace • Class view • 프로젝트 안에서 사용되는 클래스들과 클래스에 정의된 멤버 변수 및 멤버 함수를 보여주는 창임 • Icon 의미

  32. Project workspace • Resource view • Resource란 대화상자, 메뉴, 툴바, 아이콘 등과 같이 프로그램을 구현하기위해 부수적으로 필요한 자원 • [Accelerator]: 단축키 정보 • [String Table]: 프로젝트에서 사용될 문자열에 대한 리스트

  33. Project workspace • File view • 프로젝트에 포함된 파일들 보여줌 • [Source Files]: 일반적으로 클래스의 멤버함수를 정의한 cpp 파일들 포함 • [Header Files]: 일반적으로 클래스를 정의한 헤더 파일들 포함 • [Resource Files]: 자원에 대한 정의를 포함한 rc 파일 및 아이콘 파일, 툴바 이미지들이 포함됨

  34. CObject CCmdTarget CWinThread CWnd CDocument CWinApp CFrameWnd CDialog CView 주요 MFC class [주요 클래스들의 계층도]

  35. CObject 클래스 • MFC의 최상위 base class로서 메모리에 클래스를 설정하는 기능을 가짐 • 직렬화 (serialization) 지원 • 클래스의 객체가 디스크에 저장 가능하도록 지원하고 저장 유무를 확인 가능하도록 함 • Run-time 클래스 정보 제공 • 현재 클래스의 상태를 확인하고 오류 정리 가능 • 객체의 검사 출력 • 클래스의 객체가 유효한지 검사 가능 • Collection class에 대한 호환성 제공 • collection class에 저장 가능한 객체는 CObject 클래스를 상속 받은 클래스만이 가능함

  36. CCmdTarget 클래스 • MFC의 message map architecture를 지원하기 위한 base 클래스 • 사용자 클래스를 정의할 때 윈도우 메시지에 대한 처리가 필요한 클래스일 경우 CCmdTarget 클래스 혹은 CCmdTarget 클래스에서 파생된 클래스로부터 상속 받아야 함 • 모래시계 커서를 표시하는 멤버함수를 포함함 (어떤 명령이 처리될 때 사용자가 느낄 만큼의 시간이 소요될 경우 그 동안 화면에 모래시계 커서를 표시하는 기능)

  37. CWinThread 클래스 • Multithreading을 지원하기 위한 클래스 • 프로그램 실행 시 main thread는 CWinApp에서 파생된 클래스에 의해 제공됨. • 애플리케이션에서 여러 thread를 실행시키고자 한다면 추가로 CWinThread 클래스의 오브젝트가 필요함. • thread의 우선순위, thread간의 메시지 전달, thread의 suspend, resume 기능 제공하는 멤버 함수를 포함함

  38. CWinApp 클래스 • Windows application object를 생성하기 위한 base class로서 application을 초기화 하고 실행시키기 위한 멤버함수를 제공함. • MFC를 사용하는 애플리케이션에는 하나의 CWinApp 파생 object를 가짐. <Sequence of Execution> 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.

  39. CWnd 클래스 • 화면에 출력되는 모든 윈도우의 base 클래스 • 윈도우를 제어하기 위한 공통 기능들이 정의된 클래스. • Window procedure와 같은 기능을 하는 멤버 함수를 제공함 • 어떤 메시지가 들어왔을 때, 이 메시지는 message map을 통해 해당되는 OnMessage CWnd 멤버 함수로 전달됨. OnMessage 멤버 함수를 override 해서 사용함으로써 애플리케이션에서 특정 메시지에 대한 처리를 할 수 있음.

  40. CFrameWnd 클래스 • 윈도우의 외곽 경계를 정의하는 클래스 • 윈도우 메시지를 처리하며, 가시적인 윈도우 전체 영역을 나타냄 (상태바, 도구바 포함하기도 함) CFrameWnd CFrameWnd CMDIFrameWnd CMDIChildWnd CMainFrame CMainFrame CChildWnd <SDI 프로젝트> <MDI 프로젝트>

  41. CView 클래스 • 윈도우의 작업영역 (클라이언트 영역)을 정의하는 클래스 • 화면 혹은 프린터 상에 document의 내용을 보여주며 document에 대한 사용자의 입력(키보드, 마우스, 메뉴, 툴바, 스크롤바 등)을 처리함

  42. CDialog 클래스 • 모든 대화상자의 기본 클래스 • 메시지를 처리할 수 있으며 여러 가지 컨트롤들을 쉽게 사용할 수 있음 • Resource editor를 사용하여 대화상자의 폼을 디자인할 수 있음

  43. CDocument 클래스 • 애플리케이션에서 사용되는 데이터를 저장하고 제어하는 클래스 (document의 생성, 로딩 및 저장 기능 제공) • 애플리케이션에서 document를 사용하는 일반적인 방법 • CDocument의 파생 클래스를 생성 • CDocument 파생 클래스에 document의 데이터를 저장할 멤버 변수를 추가함 • document의 데이터를 읽고 수정할 수 있는 멤버 함수를 구현. view는 이 함수들을 이용함으로써 데이터를 사용자에게 보여줄 수 있음 • 데이터를 디스크에서 읽고 쓰기 위해 document 클래스의 CObject::Serialize 함수를 overriding하여 사용

More Related