티스토리 뷰
MFC 기본 코드
프로젝트는 WIN32프로젝트 Windows응용프로그램을 선택하고 빈 프로젝트 옵션을 선택한다.
VisualStudio2017 Community 에서는 빈 프로젝트를 만들 수 없어 VisaulStudio2008 로 사용했으나 코드만 이해하면 된다.
4행부터 29행 까지 직접 코딩한다.
클래스는 CWinApp 을 상속받는 CTestApp 과 CFrameWnd 를 상속받는 CMainFrame 클래스 2개만 있으면 된다.
응용프로그램 클래스 CTestApp 의 인스턴스는 WinMain() 이 실행하기 전에 존재해야 하므로, 전역 변수로 선언해야 한다. (29행)
객체가 전역범위에 존재해야 하는 이유는 응용프로그램이며, 응용 프로그램은 실행을 지삭하기 전에 존재해야 하기 때문이다. MFC에 의해 제공되는 WinMain() 함수는 윈도우 객체를 생성하기 위해 응용프로그램 객체의 InitInstance() 함수 멤버를 호출하는데, 이것은 이미 응용프로그램 객체가 존재한다는것을 암시적으로 가정한다.
응용프로그램 실행은 CTestApp 객체가 만들어 지고, MFC에서 제공하는 WinMain() 함수는 OS에서 호출되어 재정의된 InitInstance() 가상함수를 호출하여 윈도우 객체를 만들고 화면에 보여준다.
(WIN32 API 응용프로그램 코드를 보면 WinMain() 함수에서 윈도우 클래스 등록하고, 윈도우를 만드는 그 기능을 하는것이 InitInstance() 가상함수 이다.)
코드를 디버깅하면 제일 먼저 CTestApp 인스턴스가 만들어 지고 InitInstance() 호출되어 CMainFrame 객체가 만들어 질대 CMainFrame() 생성자가 실행되어 윈도우를 만들고, 다시 InitInstance() 함수로 되돌아가 화면에 윈도우를 보여준다.
CTestApp 클래스는 CWinApp 을 상속받아 InitInstance() 를 가상함수로 선언(9~10행)해서 사용자가 직접 메인프레임을 생성하고, 화면에 보이게 해주는 코드로 재정의(22~27행) 해야 한다.
24행에서 CMainFrame 객체가 만들어질때 CMainFrame 생성자에서 Create() 호출하여 윈도우를 만든다. 이데는 화면에 표시 안되고, 25행에서 ShowWindow() 호출하여 화면에 윈도우가 보이게 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 |
// WindowsProject2.cpp: 응용 프로그램의 진입점을 정의합니다.
//
#include <afxwin.h> // MFC클래스들이 정의된 헤더파일
class CTestApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
class CMainFrame : public CFrameWnd
{
public:
CMainFrame()
{
Create(0, _T("테스트 MFC 프로그램"));
}
};
BOOL CTestApp::InitInstance()
{
m_pMainWnd = new CMainFrame;
m_pMainWnd->ShowWindow(m_nCmdShow);
return TRUE;
}
CTestApp a; |
cs |
실행결과>