Как делали MFC - Готовим класс CWinApp

Библиотека MFC является объектно-ориентированной и поэтому нам нужен наш класс приложения. Добавим его в проект HMFC.

gif/2_1.gif (2855 b)

И дадим ему имя CWinApp.

gif/2_2.gif (2000 b)

Класс у нас есть. Теперь идея такая. Любая программа должны обрабатывать сообщения. То есть после WinMain должен начинаться цикл обработки сообщений. Вот и пусть он будет у нас в классе в смысле цикл обработки. Для этого в классе создадим функцию Run которая и будет запускать этот цикл обработки сообщений.

 
// H
class CWinApp  
{
public:
	int Run();			// Запуск цикла обработки сообщений
	CWinApp();
	virtual ~CWinApp();
};
// CPP
#include "stdafx.h"
#include "WinApp.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CWinApp::CWinApp()
{}
CWinApp::~CWinApp()
{}
//////////////////////////////////////////////////////////////////////
// Function
//////////////////////////////////////////////////////////////////////
int CWinApp::Run()
{
return 0;
}

Из WinMain мы должны эту функцию запустить. Но ведь мы не знаем кокой будет класс так как потом люди могут этот класс наследовать и так далее. Поэтому нам нужно завести глобальную ссылку на этот класс что бы используя ее могли добираться до этого класса. Вот мы ее и заведем.

// WinApp.cpp: implementation of the CWinApp class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "WinApp.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
extern CWinApp* afxCurrentWinApp=NULL;
CWinApp::CWinApp()
..................

Но помимо этого мы опишем и глобальную функцию доступа к этой переменной.

class CWinApp 
{
..............
};
CWinApp* AfxGetApp();
#endif // !defined(AFX_WINAPP_H__72790F55_793D_11D5_B617_CC607CDC9F5A__INCLUDED_)

Реализации ее.

//////////////////////////////////////////////////////////////////////
// Function
//////////////////////////////////////////////////////////////////////
int CWinApp::Run()
{
return 0;
}
CWinApp* AfxGetApp()
{	
	return afxCurrentWinApp;
}

Изменим конструкт CWinApp то есть при создании объект CWinApp у вас автоматически инициализируется afxCurrentWinApp

CWinApp::CWinApp()
{
afxCurrentWinApp = this;
}

Теперь нам нужно подключить заголовочный файл самого Windows.

.........
#endif // _MSC_VER > 1000
#include "windows.h"
class CWinApp  
{
.........

Собирайте проект и переходите в TestMyLib, Подключим заголовочный файл и проведем испытания.

// TestMyLib.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "HMFC\\WinApp.h"
#pragma comment(lib,"HMFC\\Debug\\HMFC.lib")   // там наш код библиотеки
int APIENTRY WinMain(HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR lpCmdLine,
	int nCmdShow)
{
	CWinApp ap;
	ap.Run(); 
	return 0;
}

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 14.07.2001