[MFC] 윈도우 프로그래밍 기초 - MFC - 배경지식
1. MFC란?
Microsoft Foundation Class의 약자이다.
해석하면, 마이크로소프트에서 만든 클래스라고 할 수 있음.
2. 왜 MFC를 만들었을까?
윈도우 API를 공부해본 사람이면 알겠지만, 윈도우 운영체제는 수천 가지나 되는 다양한 기능의 API함수들을 제공한다.
개발자가 너무나 많은 함수를 모두 다 기억하기엔 정말 힘들고 어려운 일이다.
일일이 모든 기능을 처음부터 끝까지 학습하는 것 또한 굉장히 고난스러운 일이기 때문에, Microsoft에서는 API함수를 각 기능별로 클래스화한 형태로 만든 것이 MFC라고 할 수 있다.
3. MFC의 유래
MFC의 시초는 AFX(Application Framework)에서 유래되었다고 할 수 있다.
AFX는 1990년 마이크로소프트가 윈도우 API 함수를 캡슐화하여 만든 라이브러리라고 할 수 있다.
앞서 윈도우 API함수를 캡슐화하여 만든 것이 MFC라고 하였는데, AFX는 MFC의 전 단계로 수정을 거쳐 지금의 MFC가 완성되었다고 보면 이해가 될 것이다. 1993년 이후부터 MFC 라이브러리는 Visual C++에 포함되어 제공되고 있다.
4. Visual C++, MFC, Windows의 발전사?
연도 |
Visual C++ |
MFC |
Windows 버전 |
주요 특징 |
비고 |
1993 |
MS-C 7.0 |
1.0 (AFX라고 봐야함) |
3.1 |
Win16 API 캡슐화 |
당시에는 |
1993 |
Visual C++ 1.0 / |
2.0 |
3.1 |
Document/View 구조 정립 |
|
1993 |
Visual C++ 1.5 |
2.5 |
3.1 |
ODBC 관련 클래스 및 OLE 2.01을 지원 |
|
1995 |
Visual C++ 2.0 |
3.0 |
NT 3.51 |
Win16에서 Win32로 전환 멀티스레드 관련 클래스 추가 템플릿과 예외 처리 기능 강화 |
템플릿 기능이 없었던 |
1996 |
Visual C++ 4.0 |
4.0 |
95 |
DAO 클래스 지원 ODBC 2.5 지원 윈도우95 공통 컨트롤 지원 멀티스레드 동기화를 위한 클래스 지원 Active X 문서 서버 클래스 지원 |
1. 이 때 MFC의 윤곽을 사실상 잡았다고 봐야함. |
1997 |
Visual C++ 5.0 |
4.21 |
95 / WinCE 2.0 |
인터넷 프로그래밍 지원 |
|
1998 |
Visual C++ 6.0 |
6.0 |
98 |
데이터베이스 기능 강화 |
윈도우98이 출시된 시기. Visual C++ 6.0이 한창 |
2002~ 2005 |
Visual C++.NET (2002~2005) |
7.0 ~ 8.0 |
XP, |
MFC와 ATL 라이브러리 일부 통합 닷넷 프레임워크 라이브러리 추가 비주얼 스튜디오 내 각 개발 언어간의 |
2002년 초기 당시 .NET Framework가 안된다는 말과 Visual Studio 6.0으로도 충분하지 않냐의 갈림길 그리고 이전에 코드는 어떻게 하냐를 두고 갈등이 많았음. 시간이 지난 후 이러한 갈등은 해결되었음.
|
2013 |
Visual C++.NET |
12 |
윈도우8.1, 윈도우 서버 2012 |
이 버전부터 다국어 UI를 지원. 구동할 수 있는 실행 파일만 만들 수 있었지만, 업데이트 1 이상으로 갱신하면 윈도 XP에서도 구동할 수 있는 실행 파일을 만들 수 있음. 컴파일 속도가 개선. |
|
5. MFC 계층도
다음 그림은 CObject로부터 파생된 MFC 클래스들을 나타냅니다.
다음 그림은 CWnd 및 CCmdTarget로부터 파생된 MFC 클래스들을 나타냅니다.
다음 그림은 CObject로부터 파생되지 않은 MFC 클래스들을 나타낸다.
6. MFC 계층 구조
MFC는 크게 CObject로부터 파생되는 클래스와 CObject로부터 파생되지 않은 클래스 두 가지로 요약할 수 있음.
자세한 사항은 MFC 계층도를 살펴보고 이해하면 됨.
6-1) CObject 클래스
MFC의 최상위 클래스인 CObject 클래스는 다음과 같이 구성됨.
6-2) 응용 프로그램 아키텍처 클래스(Application Architecture Classes)
윈도우 응용 프로그램의 가장 기본적인 구조를 제공하는 클래스.
MFC는 기본적으로 전체 프레임 구성을 위한 근간을 이루는 클래스가 제공되고, CCmdTarget으로부터 파생된 CWinApp 클래스가 그 기능을 수행.
메시지루프를 돌면서 윈도우 프로시저는 원하는 메시지만을 선별하고, 나머지 메시지는 기본 처리 함수에게 역할을 맡기게 됨.
6-3) 윈도우 클래스
CObject 클래스로부터 파생된 클래스인 윈도우 클래스의 구성은 다음과 같음.
사용자 인터페이스를 제공하는 모든 윈도우 관련 클래스의 최상위에 CWnd 클래스가 있다.
CWnd 클래스에서 파생된 클래스로서 응용 프로그램의 주 골격을 만들어주는 CFrameWnd 클래스, 대화 상자인 CDialog 클래스, 사용자 영역을 담당하는 CView 클래스 그리고 윈도우가 제공하는 각종 컨트롤 등이 있음.
6-3-1) 일반 클래스(General Class)
응용 프로그램 아키텍처와 윈도우 관련 클래스를 제외한 나머지 클래스를 말한다.
즉, 기본적인 윈도우 골격에 영향을 미치지 않는 클래스를 말함.
예) 소켓과 같은 윈속 클래스나 데이터베이스 관련 클래스는 윈도우 골격에 영향을 미치지 않음.
6-3-2) CObject 클래스로부터 파생되지 않은 클래스
'소프트웨어(SW) > MS - C++ (GUI) MFC' 카테고리의 다른 글
[MFC] 윈도우 프로그래밍 기초 - 대화 상자(Dialog) (2) | 2015.03.18 |
---|---|
[MFC] 윈도우 프로그래밍 기초 - 팝업메뉴 만들기(리소스의 이해) (2) | 2015.03.17 |
[MFC] 윈도우 프로그래밍 기초 - Win32 프로그램 올려보기 (3) | 2015.03.07 |
[MFC] 윈도우 프로그래밍 기초 - 메시지 루프, 처리하기. (3) | 2015.03.06 |
[MFC] 윈도우 프로그래밍 기초 - 윈도우 객체 생성, 화면 띄우기 (3) | 2015.03.06 |