390 likes | 968 Views
MFC 의 개요. MFC 윈도우 애플리케이션을 생성하기 위해 만들어진 C++ 클래스 라이브러리 애플리케이션 프레임워크를 제공 MFC 의 이점 윈도우 프로그램 전문가로 만들어 준다 . 개발시간을 단축시키고 , 이식성이 강한 코드를 작성 ActiveX, OLE, 인터넷 프로그래밍 같은 기술 지원 응용 프로그램 ( 데이터베이스 , 네트워크 ) 을 손쉽게 작성 강력한 사용자 인터페이스를 지원. MFC 의 개요. MFC 의 표기법 헝가리안 표기법을 사용한다 . 클래스는 모두 C 로 시작한다 .
E N D
MFC의 개요 • MFC • 윈도우 애플리케이션을 생성하기 위해 만들어진 C++ 클래스 라이브러리 • 애플리케이션 프레임워크를 제공 • MFC의 이점 • 윈도우 프로그램 전문가로 만들어 준다. • 개발시간을 단축시키고, 이식성이 강한 코드를 작성 • ActiveX, OLE, 인터넷 프로그래밍 같은 기술 지원 • 응용 프로그램(데이터베이스, 네트워크)을 손쉽게 작성 • 강력한 사용자 인터페이스를 지원
MFC의 개요 • MFC의 표기법 • 헝가리안 표기법을 사용한다. • 클래스는 모두 C로 시작한다. • 여러 단어가 하나의 클래스 이름일 경우 각 단어별로 첫 글자를 대문자로 표기한다. • 멤버 변수는 m_로 시작하고, 멤버 함수는 대문자로 시작한다. • 전역 함수는 Afx라는 접두어가 붙는다. • Afx는 Application Framework의 약자로 Microsoft사에서 MFC를 개발했던 팀의 이름이다.
MFC 프로그램의 구조 • SDI 애플리케이션의 구조
Template View Window Document Main Frame MFC 프로그램의 구조 • SDI 애플리케이션의 구조 • Template : • 윈도로 출력되는 형태 • Main Frame : • 윈도 외곽 경계를 담당하고 • 메뉴, 툴바, 상태바를 가지고 있음 • View 윈도 : • 실제 화면 처리를 담당 • 문자 출력, 그래픽 출력 등 • Document : • 디스크에서 데이터를 읽고 저장
MFC 프로그램의 구조 • MDI 애플리케이션의 구조
Main Frame Template View Window Document Child Frame . . . 위의 템플릿이 여러 개 있을 수 있음 MFC 프로그램의 구조 • MDI 애플리케이션의 구조 • 여러 개의 SDI형태 프로그램 • Main Frame • 독립적으로 설정되어 있고 그 안에 template • Template • Child Frame • View Window • Document
Application Class Application Class View Window Main Frame Template Template Document View Window Document Child Frame Main Frame . . . 위의 템플릿이 여러 개 있을 수 있음 MFC 프로그램의 구조 • MFC 형태의 프로그램 구조 • Application Class • MFC프로그램은 템플릿을 포함하고 한 개의 인스턴스를 포함하는 Application class가 있음
Visual C++란 • Visual C++의 특징 • 다양한 SDK 형태의 라이브러리를 제공한다 • Window환경에 맞는 C 언어용 표준 라이브러리 • 강력한 MFC가 있다 • SDK를 이용하여 클래스를 만들 때의 문제점을 해결 • 클래스 라이브러리 • 강력한 Wizard가 있다 • 단순히 반복적인 코딩을 자동으로 생성 • Class Wizard, AppWizard, Resource Editor ...
실습 2-1 • AppWizard 익히기 • 프로젝트를 만들 때 실행되는 프로그램 • 단순히 마우스 버튼으로 몇 개의 항목을 설정하면 자동적으로 프로젝트를 만들어 주고 자동 코딩을 해주는 기능 • 자동으로 소스를 만들어 주는 프로그램? • 기존의 소스를 단순하게 복사하여 코딩 하는 프로그램? • 기존의 있는 클래스를 상속 받는 또 하나의 클래스를 생성? Class CMainFrame : CFrameWnd { … }
Application Wizard • AppWizard Step1 • 프로그램의 형태 선택 • Single Document • Multiple Document • Dialog Based • Document 유무 • 프로그램 지원 언어 • Visual C++ 6.0 에서 부터 한국어 지원
Application Wizard • AppWizard Step2 • 데이터베이스 라이브러리 사용 설정 • 데이터 베이스 사용유무 • 헤더 파일만 포함 • Open,save등의 항목 없이 사용 • File 항목을 사용 하면서 db사용
Application Wizard • AppWizard Step3 • OLE 옵션 설정 • OLE항목의 사용여부 • 객체 삽입 항목을 가지고 있는지 • 객체 삽입 항목에서만 구동 되는지 • 독립적 형태로 구동 되면서 OLE를 지원하여 객체 삽입 항목에서도 구동 되는지 • 자신도 객체 삽입 항목에서 구동 되는지 • Active X 옵션 설정 • ActiveX 컨트롤을 자신의 프로그램에 삽입 시킬 수 있는지.
Application Wizard • 개체 삽입의 예 • 프로그램 실행 후 개체 삽입을 선택 했을 경우 • 자신의 프로그램에 개체삽입을 제공하는 다른 프로그램을 삽입 하여 구동
Application Wizard • AppWizard Step4 • 윈도 출력 형태 옵션 설정 • 윈도에 들어가는 메뉴나 툴바, 상태바 등 설치 여부 • 툴바의 형태 • 진보적인 스타일을 지정하기 위해 Advanced 버튼을 사용
Application Wizard • AppWizard Step4 • Advanced Option 선택 • 파일 확장자 • 파일 ID • 도큐먼트 이름 • 새로운 파일 선택 시 타이틀 바에 출력문자 • 캡션바에 출력문자 • 파일 대화 상자가 출력되었을 Filter • 파일 Type 이름
Application Wizard • AppWizard Step4 • Advanced Option 선택 (Window Styles) • 메인 프레임 스타일 • MDI 형태일 경우 자식 프레임 스타일
Application Wizard • AppWizard Step5 • 프로젝트 스타일 설정 • MFC Standard • Window Explorer • 소스에 커맨드 설정 • MFC라이브러리의 사용 방법 • DLL로 사용 • LIB로 사용
Application Wizard • AppWizard Step6 • Class 와 파일 대한 정보 및 수정 • Class 이름은 모든 class에서 변경할 수 있다. • Source file과 Header file 이름은 App class 외에 다른 class 에서만 변경할 수 있다 • Base class이름은 View class 에서만 변경할 수 있다.
Application Wizard • AppWizard 완료 • AppWizard를 사용하여 만든 프로젝트에 대한 정보를 보여준다. • Application type • Classes to be created • Features
Application Wizard • MDI형 프로젝트 만들기 • SDI와 동일하고 Step 1에서 MDI를 선택 • 추가된 내용 • CChildFrame 만이 추가 되었다 • Child Frame class는 Base Class 이름만 변경할 수 없다.
Application Wizard • AppWizard 기능 • 만들고자 하는 기본적인 프로젝트를 생성 해주고 그 안에 필요한 클래스 생성 • 클래스에 기본적인 내용을 코딩 • 기본적인 코딩시간을 절약 하므로 빠른 프로젝트 완성 • AppWizard사용 도중 실수로 옵션을 선택하지 않았을 경우 소스에서 새로 추가할 수 있다.
Project Workspace • 프로젝트 워크스페이스의 구성 • MFC 클래스를 상속 받아 탄생된 새로운 클래스 • 클래스 소스가 설정되어 있는 파일들 • 소스파일 cpp • 헤더 파일 h • 프로그램에 필요한 메뉴, 아이콘, 문자열, 대화상자 같은 자원
항 목 내 용 ClassView 프로젝트에 설정되어 있는 클래스별로 출력, 해당 항목을 선택하면 수정 가능 ResourceView 프로젝트에 설정되어 있는 메뉴, 대화 상자, 문자열, 아이콘, 비트맵 등 자원의 리스트 출력, 해당 항목 선택 수정 가능 FileView 프로젝트에 설정되어 있는 파일 리스트 출력, 해당 항목을 선택하여 수정 가능 Project Workspace • 프로젝트 워크스페이스의 항목별 설명
Project Workspace • Class View 화면 • 해당 항목을 더블 클릭하면 클래스 헤더가 나타나고 우측 버튼을 클릭하면 해당 클래스에 함수나 변수 설정되도록 메뉴 설정 • 해당 클래스의 멤버 함수와 멤버 변수의 리스트 • +버튼을 클릭한 상태에서 해당 항목을 클릭하면 해당 항목이 설정되어 있는 소스 파일로 이동 • protected 형태로 설정되어 있을 경우(열쇠) • protected 형태로 설정되어 있지 않을 경우는 열쇠 아이콘이 나타나지 않음
Project Workspace • Resource View 화면 • Resource : 윈도우 프로그램을 만들 때 필요한 여러 자원 • 엑셀레이터(핫키 정의) 키값을 정의하는 항목 • 대화 상자(어떤 형태의 대화 상자의 출력할 폼을 만들어서 저장) 자원들 • 아이콘 자원 • 메뉴 자원 • 문자열 테이블 • 툴바
Project Workspace • File View 화면 • 소스 파일 • 헤더 파일 • 자원 파일
CObject CCmdTarget CWnd CWinThread CDocument 기타 CWinApp MFC Application Architecture • MFC클래스의 기본 구조 • MFC의 계층적 구조 형태 ► CMainFrame 과 Cview클래스는 CWnd에서 상속받음
MFC Application Architecture • CObject 클래스 (최상위 클래스) • 메모리에 클래스를 설정하는 기능 • 클래스를 할당하기 위한 new연산자가 오버로딩 • /MFC/Include/Afx.h에 설정 • 클래스의 기능과 종류를 알 수 있는 함수가 있음 • IsSerializable() : 현재 클래스가 데이터를 디스크에 저장할 수 있는 기능을 자지고 있는지 없는지를 확인하는 함수 • AssertValid( ) : 현재 클래스가 유효한 클래스인가를 확인하는 함수 • Dump() : 현재 클래스의 상태를 확인하는 함수 • 디버깅할 때 이 함수를 이용하여 데이터의 상태를 확인하고 오류를 정리할 수 있음
윈도우 시스템 Application 메시지 전송 메시지 처리 이벤트 발생 화면에 출력 MFC Application Architecture • CCmdTarget클래스 • 메시지 전송을 담당하는 클래스 • 실질적으로 메시지를 처리하는 것이 아니라WM_COMMAND와 OLE 메시지만 담당
MFC Application Architecture • CWnd클래스 • 화면에 보이는 윈도들은 모두 CWnd 에서 상속 받음 • 가장 많이 사용되는 클래스 • 윈도우의 최상위 클래스 • 상속해서 사용하지 직접 CWnd 클래스를 사용하지는 않는다. • 윈도우를 구동하는 모든 기능을 가진 함수가 있다. • Initialization • Window State Functions • Window Size and position • Coordinate Mapping Functions • Window Message Functions • ……..
MFC Application Architecture • CWndThread 클래스 • 윈도가 스레드로 돌아갈 수 있도록 구동 되는 클래스 • 스레드는 독립적인 형태로 구동 되는 하나의 모듈 • 한 개의 프로그램을 독립적으로 움직이려면 한 개의 프로그램은 한 개 이상의 CWinThread를 포함해야 한다 • Multi-tasking이 가능 • CWndApp 클래스 • 한 개의 프로그램을 포함하고 관장하는 클래스
MFC Application Architecture • CDocument 클래스 • 데이터를 디스크에서 읽어 들이거나 디스크에 저장하는 부분을 담당하는 클래스 • 주로 알고리즘을 저장 • 나중에 다른 프로그램에서 재사용이 용이
CFrameWnd CControlBar CPropertySheet CDialog CView Control class CWnd를 상속 받은 클래스들 CWnd 프레임 형태의 윈도우 컨트롤 바 프로퍼티 시트 대화 상자 View 윈도우 컨트롤 들
실습 2-2 • Cstring 클래스 • 문자열을 처리하는 클래스 • 멤버 함수