2.3.3 CMainFrame 클래스 분석
CMainFrame 클래스는 메인 프레임 윈도우를 관리하는 클래스이다. 다중 문서 인터페이스 프로그램에서 메인 프레임 윈도우는 프로그램의 전체를 감싸는 틀의 역할을 한다. 일반적으로 프로그램의 메뉴와 툴바, 상태바, 최소화/최대화/닫기 버튼 등을 가지고 있다. CMainFrame 클래스는 MainFrm.h와 MainFrm.cpp 파일에 구현되어 있다.
그림 2-36은 CMainFrame 클래스의 멤버 함수의 목록을 보여준다. 이 중에서 AssertValid, Dump 함수는 디버깅 용도로 만들어진 함수이며 프로그램 동작에는 큰 영향을 끼치지 않는다. 관심을 가지고 봐야 할 함수는 OnCreate 함수이다. OnCreate 함수는 메인 프레임 윈도우가 생성된 후 바로 호출되는 함수로서 메인 프레임 윈도우의 초기화 작업은 모두 이 함수에서 이루어진다. 그러므로 OnCreate 함수에 대해 좀 더 자세히 알아보자.
OnCreate 함수의 시작 부분에서는 CMainFrame 클래스의 상위 클래스인 CMDIFrameWnd 클래스의 OnCreate 멤버 함수를 호출하여 모든 프레임 윈도우에 공통으로 필요한 초기화 작업을 먼저 수행한다.
CMDIFrameWnd::OnCreate(lpCreateStruct);
그 후 First 프로그램의 메인 프레임 윈도우에서 사용할 툴바와 상태바 윈도우를 만드는 작업을 한다.
m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE …) m_wndToolBar.LoadToolBar(IDR_MAINFRAME); m_wndStatusBar.Create(this);
이때 사용되는 멤버 변수 m_wndToolBar는 CToolBar 클래스 타입으로 정의된 변수이고, m_wndStatusBar는 CStatusBar 클래스 타입의 멤버 변수이다. 툴바를 생성하기 위하여 CToolBar 클래스의 멤버 함수 CreateEx를 사용하였고, 상태바를 생성하기 위해서는 CStatusBar 클래스의 멤버 함수인 Create를 사용하였다. 툴바와 상태바를 생성한 후에는 상태바 구역을 나누거나 툴바를 메인 프레임 윈도우에 도킹docking하는 작업을 수행한다. 전체 코드는 MainFrm.cpp 파일을 참고하기 바란다.
헝가리안 표기법이란 변수 이름을 지을 때 그 변수의 타입이 무엇인지를 암시하는 접두어를 사용하여 이름을 짓는 것을 의미한다. 변수의 이름에 데이터 형식을 기술해 줌으로써 데이터 형식의 불일치 등의 코딩 오류를 방지하고, 멤버 변수와 지역 변수를 쉽게 구분하는 데 도움을 준다. 그러나 최근에는 접두어가 너무 많아 오히려 소스 코드의 가독성이 떨어진다고 헝가리안 표기법을 기피하는 사람들도 있다. 다만 MFC 코드들은 예전 헝가리안 표기법을 최대한 준수해서 만들어져 있기 때문에 이를 이해하고 있으면 코드 분석에 도움이 된다. MFC에서 주로 사용하는 헝가리안 표기법의 예를 아래에 표로 정리하였으니 참고하기 바란다.
접두어 |
의미 |
접두어 |
의미 |
m_ |
멤버 변수 |
b |
BOOL |
wnd |
윈도우 |
l |
LONG |
n |
정수형 |
str |
CString |
w |
WORD |
h |
핸들(handle) |
dw |
DWORD |
p |
포인터 변수 |