728x90
300x250

[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 캡슐화

 당시에는
 MFC(Microsoft Foundation Classes)라는
 거창한 이름이 없어서 AFX(Application Framework)
 라고 부름.

 1993

 Visual C++ 1.0 /
 Quick-C 2.5

 2.0

 3.1

 Document/View 구조 정립
 DDX/DDV 매카니즘 지원
 응용 프로그램 프레임워크 구조 도입

 

 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로 전환
 Winsock API와 MAPI 클래스 추가

 멀티스레드 관련 클래스 추가

 템플릿과 예외 처리 기능 강화 

 템플릿 기능이 없었던
 시절에서 당시에는 혁명임.?

 1996

 Visual C++ 4.0

 4.0

 95

 DAO 클래스 지원

 ODBC 2.5 지원

 윈도우95 공통 컨트롤 지원

 멀티스레드 동기화를 위한 클래스 지원

 Active X 문서 서버 클래스 지원

 1. 이 때 MFC의 윤곽을

 사실상 잡았다고 봐야함.
 2. MFC42.DLL 파일을 
    보신 분은 이 때
    윤곽잡힌 파일을
    만들었다고 보면 됨.

 1997

 Visual C++ 5.0

 4.21

 95 / WinCE 2.0

 인터넷 프로그래밍 지원
 ATL 포함
 온라인 도움말 제공

 

 1998 

 Visual C++ 6.0

 6.0

 98

 데이터베이스 기능 강화
 향상된 디버깅 환경 제공
 공통 컨트롤 추가

 윈도우98이 출시된 시기.

 Visual C++ 6.0이 한창
 불티나게 팔림.

 2002~

 2005

 Visual C++.NET
 7.0 ~ 8.0

 (2002~2005)

 7.0 ~ 8.0

 XP, 
 서버 2003

 MFC와 ATL 라이브러리 일부 통합

 닷넷 프레임워크 라이브러리 추가

 비주얼 스튜디오 내 각 개발 언어간의
 개발환경통합

 2002년 초기 당시 .NET Framework가 안된다는 말과 Visual Studio 6.0으로도 충분하지 않냐의 갈림길 그리고 이전에 코드는 어떻게 하냐를 두고 갈등이 많았음.

 시간이 지난 후 이러한 갈등은 해결되었음.
(쓰레기 운영체제 윈도우 비스타와 윈도우 7 덕분에)

 

 2013

 Visual C++.NET
 12

 12

 윈도우8.1,

 윈도우 서버 2012

 이 버전부터 다국어 UI를 지원.
 윈도 8, 윈도 RT 전용 소프트웨어인 윈도 스토어 지원 앱을 만들 수 있다.
 ARM 아키텍처에서 구동할 수 있는 윈도 스토어 전용 앱을 만들 수 있다.
 출시 초기에는 윈도 7 이상에서만

구동할 수 있는 실행 파일만 만들 수

있었지만, 업데이트 1 이상으로 갱신하면 윈도 XP에서도 구동할 수 있는 실행 파일을 만들 수 있음.
 테스트 프로페셔녈 버전에는 컴파일러가 포함되어 있지 않음.
 HLSL 컴파일 기능과 DirectX 그래픽 디버거를 포함한다. (XP 지원 모드 제외)

 컴파일 속도가 개선.
 표준 C++11을 도입.

 

 

 


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 클래스로부터 파생되지 않은 클래스

 

 

반응형

+ Recent posts