IT_Programming/MFC · API

Environment : Visual Studio .NET 2003

JJun ™ 2007. 9. 24. 16:47

MFC 응용프로그램 마법사를 통해 문서/뷰(Document/View) 아키텍쳐 형식으로 SDI를 생성했을 경우 기본적으로 생성되는 클래스들에 대해 알아보자.

기본적으로 5개의 소스파일과 6개의 헤더파일이 생성된다. 4개의 기본 클래스와 미리 컴파일된 헤더파일을 생성하기 위한 stdafx가 존재한다.

// Application Class
CWinApp클래스는 응용프로그램의 구조 자체를 담당한다. 즉, 프로그램의 초기화, 실행, 종료에 관한 일을 담당하는 클래스로, WIN32 API로 작성한 SDK프로그램에서는 WinMain 함수가 있듯이 MFC로 제작된 프로그램은 반드시 CWinApp에서 파생된 클래스를 가지고 있다.

// MainFrame Class
메인 프레임 클래스는 사용자에게 보여지는 프로그램의 외형을 담당한다. 여기에는 사용자 영역(Client Area)을 담당하는 뷰 클래스를 제외한 타이틀 바, 도구 모음, 상태 바, 시스템 메뉴, 메인 메뉴 등을 관리한다. 현재 생성된 CMainFrame의 부모 클래스는 단일 문서(SDI), 다중 문서(MDI) 여부에 따라 달라진다. SDI의 경우에는 CFrameWnd, MDI의 경우에는 자식 윈도우를 관리하는 CMDIChildWnd 클래스가 더 추가된다.

// View Class
뷰 클래스는 클라이언트의 영역인 뷰 윈도우를 관리한다. 도큐먼트에서 정의된 데이터를 화면에 출력하거나 프린터 등에 디스플레이 시킨다.

// Document Class
도큐먼트 클래스는 뷰에 출력할 데이터를 보관한다. 파일로부터 로드하거나 저장하는 작업을 관리한다.

// Precompiled Header
어플리케이션, 메인프레임, 뷰, 도큐먼트 클래스의 구현파일의상단부에 #include "stdafx.h"가 삽입되어 있을 것이다. stdafx.cpp 파일에는 단순히 stdafx.h 파일을 include 하고 있을 뿐 생성된 코드는 없다. stdafx.h 파일에는 MFC의 각종 헤더파일이 삽입되어 있다. 이 헤더파일을 살펴보면 다음과 같다.

 

#include <afxwin.h>               // MFC 핵심 및 표준 구성 요소
#include <afxext.h>                
// MFC 익스텐션
#include <afxdisp.h>              
// MFC 자동화 클래스

#include <afxdtctl.h>               
// Internet Explorer 4 공용 컨트롤에 대한 MFC 지원
#ifdef_AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>                // Windows 공용 컨트롤에 대한 MFC 지원

 

stdafx.h와 stdafx.cpp 파일의 주 목적은 미리 컴파일 된 헤더파일(Precompiled header file)을 생성하기 위해 사용한다. 프리컴파일 헤더파일(PCH;Precompiled Header)은 궁극적으로 컴파일 속도를 향상시키는데 그 목적이 있다. 위에 나열된 헤더파일에 대한 구현파일(.cpp)들은 크기도 크며, 컴파일 하는데 많은 시간이 소요되므로 프로그램을 처음 컴파일할 때에만 적용되며, stdafx.h 또는 stdafx.cpp 파일의 변화가 없는 한 다시 컴파일 되지 않는다. 일반적으로 PCH 파일의 크기는 4MB가 넘는다. 소스를 보관하고자 할 때에는 이러한 피일들을 삭제하여 보관하는 것이 불필요한 디스크의 낭비를 막을 수 있다.

Reference : Visual C++ .Net Programming Bible(Samyang Media)