본문 바로가기

Application Programming Interface/Microsoft Foundation Class

1. MFC 시작하기

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

stdafx.h로 공통 헤더 설정하기


파일명: stdafx.h

#ifndef __STDAFX_H

#include <afxwin.h>

#endif

CWinApp를 구현하기


파일명: CTestApp.h

#pragma once

class CTestApp : public CWinApp
{
public:
	CTestApp();

public:
	virtual BOOL InitInstance();

	// 어플리케이션 수준에서 발생되는 메시지를 처리할 메시지 맵입니다.
	DECLARE_MESSAGE_MAP()
};

// theApp은 MFC에서 고정된 어플리케이션 이름입니다.
// MFC로 작성된 프로그램을 실행하면 운영체제는 theApp이라는 이름의 인스턴스를 찾게 됩니다.
// 그런데 헤더파일에서는 인스턴스를 직접 선언하지 못하므로
//"어딘가 cpp파일에 이런 이름의 인스턴스가 있다"는 의미로 extern을 붙입니다.
extern CTestApp theApp;

파일명: CTestApp.cpp

#include "stdafx.h"
#include "CTestApp.h"
#include "CMainFrame.h"

// 어플리케이션의 인스턴스입니다.
CTestApp theApp;

// 어플리케이션 수준에서 발생되는 메시지를 처리할 메시지 맵입니다.
BEGIN_MESSAGE_MAP(CTestApp, CWinApp)
END_MESSAGE_MAP()

CTestApp::CTestApp()
{
}

// 어플리케이션이 초기화될 때 실행되는 메서드입니다.
// 메인 윈도우를 지정하는 등 프로그램이 처음 실행될 때 필요한 초기 설정은 여기서 합니다.
BOOL CTestApp::InitInstance()
{
	// 상위 클래스의 InitInstance를 실행해 초기화와 관련된 기본적인 작업들은 부모 클래스에 맡깁니다.
	BOOL ret = CWinApp::InitInstance(); 

	if(ret) // 부모클래스가 초기화 성공했다고 알려오면 비로소 자신의 작업을 진행합니다.
	{
		// 어플리케이션이 실행될 때 (내부적으로 WinMain이 실행될 때) 메인 윈도우는 여기서 수동으로 띄워줍니다.
		// 메인 윈도우 인스턴스 만들고
		CMainFrame * lpMainFrame = new CMainFrame();
		// 윈도우를 만듭니다.
		// 첫 번째 인자는 WNDCLASS, WNDCLASSEX 구조체로 사전에 등록된 윈도우를 기반으로 만드는 것이고,
		// 두 번째 인자는 제목표시줄에 보일 텍스트를 지정합니다.
		// 그 뒤로 몇 개의 인자가 더 있지만, 여기서는 기본값을 사용하기 위해 생략합니다.
		lpMainFrame->Create(NULL, TEXT("Hello, World!")); 
		// 기본 크기로 윈도우를 띄웁니다.
		// 인자에는 SW_MAXIMIZED(최대 크기로 열기), SW_MINIMIZED(최소 크기로 열기) 등이 있습니다.
		lpMainFrame->ShowWindow(SW_SHOW); 
		// 띄운 윈도우를 다시 한 번 그립니다. 일종의 새로고침이라고 보면 됩니다.
		lpMainFrame->UpdateWindow();
		// 띄운 윈도우를 이 어플리케이션의 메인 윈도우로 등록합니다. 메인 윈도우가 닫히면 어플리케이션이 종료됩니다.
		this->m_pMainWnd = lpMainFrame; 
	}

	return ret; // 부모 클래스에서 반환한 값을 그대로 반환합니다.
}

CFrameWnd로 메인 윈도우 구현

파일명: CMainFrame.h


#pragma once

class CMainFrame : public CFrameWnd
{
public:
	CMainFrame();
	~CMainFrame();

	// 어플리케이션 수준에서 발생되는 메시지를 처리할 메시지 맵입니다.
	DECLARE_MESSAGE_MAP()
};

파일명: CMainFrame.cpp

#include "stdafx.h"
#include "CMainFrame.h"

// 어플리케이션 수준에서 발생되는 메시지를 처리할 메시지 맵입니다.
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
END_MESSAGE_MAP()

CMainFrame::CMainFrame()
{
}

CMainFrame::~CMainFrame()
{
}

실행 결과

CWinApp, CFrameWnd 클래스의 실제 위치