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