MFC 구조
1. MFC란?
MFC는 Microsoft Foundation Classes의 약자로, Windows 응용프로그램 개발에 사용될 수 잇는 Class들의 모음이다.
MFC Library에 있는 Class들은 C++언어로 작성되었으며, 이미 작성되어 있는 Code(Windows API로 구성된 Code)들을 사용함으로써 프로그래머의 시간절약 시켜줄 뿐 아니라, 또한 응용프로그램을 개발하기 위한 전반적인 틀을 제공한다.
2. MFC 기본 구조
3. MFC 클래스
1) CObject
- MFC를 구성하는 최상 클래스 및 최초의 객체, MFC 클래스의 원조 클래스이며, 다른
클래스들의 기본 클래스.
- CObject 는 실행 시 Run-Time의 자료형 정보, 직렬화, 진단 등 포함한 다양한
실행시의 특성을 가지고 있다.
- 대부분의 MFC Class가 CObject 클래스로부터 상속되며, Class 자신의 정보 저장 및
클래스 정보 전달기능을 가짐.
2) CCmdTaget (Application Architecture)
- 메시지를 받고 받은 메시지에 해당하는 모듈을 실행시키고 메시지를 전송하는
방식을 사용하는 Window Program은 Message Driven 방식을 사용한다.
- Message Driven 방식이기 때문에 기본적으로 메시지를 받는 클래스가 필요하며,
이를 사용하기 위해 ‘CObject’ 로부터 상속을 받아 Message를 처리 한다.
- Message Map 을 관리하고, Message 관련 처리를 해주는 역할을 한다.
① CWinApp
- 서로 다른 Class들을 합치고 프로그램을 구동 시키며, 프로그램의 시작과 종료를
담당 한다.
- 프로그램을 실행 시 Main frame(CMyFrame)을 생성시키며, 무한 Loop 상태로
있다가, WM_QUIT(종료) 메시지를 만나면 프로그램 종료한다.
② CDocument
- CDocument클래스는 사용자에 의해서 정의된 문서 클래스들을 위해서 기본적인
기능 들을 제공한다.
③ CFrameWnd
- Window 이동, 크기 조절 등 Window의 Frame을 관리한다.
- 또한 메뉴, 툴바와 상태바의 관리를 이곳에서 수행한다.
④ CView
- Data를 Window에 보여주는 일반적인 역할을 한다.
3) CFile (File Services)
- 버퍼 없는 바이너리 디스크 I/O 서비스를 제공한다.
- 파일을 개폐하고 또한 데이터를 파일에 기록할 때 이전에는 보통 _lopen, _lcreate, _lseek
함수 등을 사용하였으나, CFile 클래스는 이 함수를 대신하여 파일을 원활하게 컨트롤
할 수 있도록 설계된 클래스이다.
① CMemFile : 메모리맵 파일에 대한 엑세스를 제공한다.
② CSharedFile : 공유 메모리 파일을 지원한다.
③ OleStreamFile : OLE의 구조적 저장방식인 복합파일에서 데이터의 Stream을
표현한다.
④ CMonikerFile
: 경로 이름이 일반적인 디스크 파일을 구분하는 것과 마찬가지로, 복합 파일에서
데이터의 Stream을 표현한다.
⑤ CAsyncMonikerFile
: Data Stream으로부터 비동기적으로 데이터를 Load하는 ActiveX 컨트롤의
기능을 지원한다.
⑥ CDataPathProperty
: ActiveX 컨트롤이 컨트롤 Property 데이터를 비동기적으로 Load하도록 허용한다.
⑦ CCachedDataPath
: ‘PropertyActiveX’ 컨트롤이 컨트롤 Property Data를 비동기적으로 Load하고,
데이터를 RAM에 Cache하도록 허용한다.
⑧ CSocketFile : TCP/IP Network 접속에서 데이터를 보내고 받는데 사용된다.
⑨ CStdioFile : C런타임 File Stream과 비슷한 버퍼있는 디스크 I/O 서비스를 제공한다.
⑩ CGopherFile : Gopher Server로부터 데이터를 전공하는 것을 캡슐화 한다.
⑪ CHttpFile : Web Server로부터 데이터를 전송하는 것을 캡슐화 한다.
⑫ CRecentFileList : 가장 최근에 사용된 (MRU) 파일 리스트를 제어하게 해준다.
4) CWnd (Window Support)
- Windows에 관련된 기능, 즉 눈에 보이는 Objcet(객체)를 담당한다.
- 화면에 출력되어 우리의 눈에 보이는 Window라는 객체를 클래스로 구현되었다.
- 300여 개의 멤버 함수를 가지며, Window의 크기, 위치, 모양, 상태 등을 제어하기 위한
함수 100 여개의 멤버 함수를 가진다.
- Message Handler라고 불리는 멤버 함수로, 윈도우에서 발생하는 메시지를 처리하기
위한 함수가 약 200 여개 된다.
Ø CWnd 클래스 - Frame Windows
① CFrameWnd : SDI 프레임 윈도우
② CMDIChilfWnd : MDI 자식 윈도우
③ CMDIFrameWnd : MDI 프레임 윈도우
④ COleIPFrameWnd : TODO
⑤ CSplitterWnd : 탐색기 스타일의 분할 윈도우
Ø CWnd 클래스 - Views Windows
① CView
- 문서/뷰 애플리케이션에서 기본적인 View를 캡슐화
- 데이터를 보여주고 윈도우 관리하는 기능
- 도큐먼트 안에 있는 데이터를 화면에 출력하는 역할을 하는 클래스
② CCtrlView
- 문서/뷰 구조를 윈도우즈 공통 컨트롤에 적용한다.
- 다음 네 클래스를 위한 기반 클래스로 사용된다.
③ CEditView
- 문서/뷰 구조를 Windows 공통 에디트 컨트롤
- 텍스트 편집, 단어 검색, 치환 그리고 스크롤을 자체적으로 해결한 뷰
- 간단한 텍스트 에디터를 만드는데 편리한 클래스.
④ CListView : 문서/뷰 구조를 Windows 공통 리스트 컨트롤
⑤ CRichEditView : 문서/뷰 구조를 Windows 공통 Rich 컨트롤
⑥ CTreeView : 문서/뷰 구조를 Windows 공통 트리 컨트롤
⑦ CScrollView : 내장스크롤 기능을 가지는 CView를 제공하며, 화면 스크롤도 가능
⑧ CFormView : 다이얼로그 박스와 같이 컨트롤을 가지는 뷰의 기반 클래스
⑨ CDaoRecordView
- 컨트롤에서 젯(Jet) 데이터베이스 레코드 셋 정보를 출력하는 CView의 일종
⑩ CRevordView
- 컨트롤에 ODBC 데이터베이스 레코드 셋 정보를 출력하는 CView의 일종
Ø CWnd 클래스 - Dialog Boxes Windows
① CDialog : 다이얼로그 박스를 출력하는데 사용되는 기반 클래스
② CCommonDialog : Windows 공통 다이얼로그의 기능
다음의 5가지 클래스의 기반 클래스로 사용된다.
③ CColorDialog : Windows 공통 색상 선택 다이얼로그 컨트롤
색상을 선택하기 위한 표준 다이얼로그 클래스
④ CFileDialog : Windows 공통 파일 선택 다이얼로그 컨트롤
파일을 열거나 저장, 폴더를 찾아가기 등의 일을 하는 표준 다이얼로그 클래스
⑤ CFindReplaceDialog : 윈도우즈 공통 찾기와 바꾸기 다이얼로그 컨트롤
문자를 검색, 지정한 문자열로 치환하는 표준 다이얼로그 클래스
⑥ CFontDialog : 윈도우즈 공통 글꼴 선택 다이얼로그 컨트롤
폰트를 선택, 글자 크기와 속성을 지정하는 표준 다이얼로그 클래스
⑦ CPrintDialog : 윈도우즈 공통 인쇄 다이얼로그 컨트롤
인쇄와 인쇄 설정 다이얼로그 박스를 구현하는 쉬운 방법을 제공
⑧ CPropertyPage : 프로퍼티시트의 단일 페이지를 표현
Ø CWnd 클래스 - Controls
* CButton : 다이얼로그 박스에서 흔히 볼 수 있는 체크 박스나 라디오 버튼
* CBitmapButton : 텍스트가 아니라, 비트맵 레이블을 가지는 푸쉬 버튼
* CComboBox : 관련된 풀 다운 리스트를 가지는 에디트 박스
* CEdit : 텍스트 박스
* CHeaderCtrl : 텍스트의 컬럼 상단에 위치되고, 컬럼 타이틀을 가지는 윈도우.
* CHotKeyCtrl : 윈도우즈 공통 핫키 컨트롤
* CListBox : 선택 사항의 리스트를 가지는 컨트롤
* CCheckListBox : 설정이나 취소될 수 있는 박스를 출력하는 컨트롤
* CDragListBox : 표준 리스트 박스를 캡슐화하고, 사용자가 새로운 위치로
드래그하여 리스트 아이템을 재정렬하게 해준다.
* CListCtrl : 리스트 뷰 컨트롤
* COleControl : ActiveX 컨트롤을 개발하는데 사용되는 기반 클래스
* CProgressCtrl : 윈도우즈 공통 프로그래스바 컨트롤
* CRichEditCtrl : 윈도우즈 공통 리치 에디트 컨트롤
* CScrollBar : 스크롤바의 기능을 제공한다
* CSliderCtrl : 윈도우즈 공통 슬라이더 컨트롤
* CSpinButonCtrl : 윈도우즈 공통 스핀 버튼 컨트롤
* CStatic : 정적 컨트롤 텍스트 스트링, 박스, 사각형, 아이콘, 비트맵, 커서를 출력함
* CStatusBarCtrl : 윈도우즈 공통 상태바 컨트롤
* CTabCtrl : 윈도우즈 공통 탭 컨트롤
* CToolBarCtrl : 윈도우즈 공통 툴바 컨트롤
* CToolTipCtrl : 윈도우즈 공통 툴팁 컨트롤
* CTreeCtrl : 윈도우즈 공통 트리 컨트롤. 계층적인 형식의 컨트롤
5) Graphic
- MFC 클래스 계열 중에 Graphics에 포함되는 Class는 Device contexts와
Graphics devices 클래스로 나뉘어 진다.
- 그래픽이나 텍스트를 출력할 수 있는 Windows
① CDC : Device contexts를 캡슐화하고, contexts를 다루기 위한 멤버 함수
② CClientDC : 윈도우의 클라이언트 영역에 관련된 장치 contexts를 구성
③ CMetaFileDC : 윈도우즈 메타 파일에 관련된 장치 contexts를 구성
④ CPaintDC
- WM_PAINT 메시지에만 반응하는 Device contexts 구성
- 윈도우의 화면 출력에 사용되며, 주로 OnPaint()에 의해 사용
- 클래스 호출 시 BeginPaint가 실행되고, 소멸될 때에 EndPaint가 실행됨
⑤ CBitmap : Windows의 Bitmap을 캡슐화하고, 이미지를 다루는 멤버 함수를 제공
⑥ CBrush : 윈도우즈 GDI 브러시를 캡슐화
⑦ CFont : 윈도우즈 GDI 글꼴을 캡슐화
⑧ Cpalette : 윈도우즈 GDI 색상 팔레트를 캡슐화.
⑨ CPen : 윈도우즈 GDI 펜을 캡슐화
⑩ CRgn : 윈도우즈 GDI 영역(region)을 캡슐화
6) Database Support
- MFC는 ODBC와 마이크로소프트젯(Jet)의 두 가지 형태의 Database를 지원
- Database를 Access할 시 호출 되는 Class
① CDatabase : ODBC 데이터베이스에 대한 접속을 클래스
② CRecordset : ODBC 기반 레코드셋을 클래스
③ CLongBinary
: ODBC 데이터베이스 내에서 이미지와 같은 Binary Object를 다루는 클래스
④ CDaoDatabase : 마이크로소프트 젯(액세스) 데이터베이스에 대한 접속 클래스
⑤ CDaoQueryDef : 젯 질의 정의 클래스
⑥ CDaoRecordset : 젯 레코드셋을 표현 클래스
⑦ CDaoTableDef : 젯 테이블 정의를 표현 클래스
⑧ CDaoWorkspace : 젯 워크스페이스를 표현 클래스
7) Exceptions
- 치명적인 에러 발생 시에 컴퓨터가 멈추는 일을 막는다.
① CException : 여러 가지 예외 처리들에 대한 기본 클래스
② CArchiveException : 데이터 기록에 대한 예외 처리 클래스
③ CFileException : 파일에 관련된 예외 처리 클래스
④ CMemoryException : 메모리 고장에 관한 예외 처리 클래스
⑤ CNotSupportedException
: 지원되지 않는 특성을 호출하였을 때 발생하는 예외처리
⑥ CResourceException
: 윈도우 리소스를 메모리에 로딩 하는 데 실패할 경우 예외처리
⑦ CUserException
: 사용자가 정의할 수 있는 클래스.
: 예외 처리에 들어가기 전에 문제가 무엇인지를 Windows에 정의해야 함.
8) 기타
① CMenu : 메뉴 처리 클래스
② CAsyncSocket : 비동기 Socket 통신 처리 클래스
③ CSocket : 동기 Socket 통신 처리 클래스