深入浅出MFC:MFC的程序的初始化过程

对于一个标准的MFC的程序,弃去细枝末节,其主要的初始化流程主要如下:

首先是基本类的内容的声明与实现:

这些通常由VS内部自动生成,包含了一些MFC类的基本结构:

//MFC.h
#pragma once
//最基础的基本类型的定义

#define BOOL int
#define TRUE 1
#define FALSE 0

#include
using namespace std;

class CObject
{
	public:
		CObject::CObject(){}
		CObject::~CObject() {}
};

class CCmdTarget : public CObject
{
public:
	CCmdTarget::CCmdTarget() {}
	CCmdTarget::~CCmdTarget() {}
};

class CWinThread :public CCmdTarget
{
public:
	CWinThread::CWinThread() {}
	CWinThread::~CWinThread() {}

	virtual BOOL InitInstance(){
		cout << "CWinThread::Instance"<

//MFC.cpp
//该文件编译的时候则依赖MY.h
//2个实现文件所依赖的声明项是相同的


#include "MY.h"

extern CMyWinApp theApp;

BOOL CWnd::Create()
{
	cout << "CWnd::Create" << endl;
	return TRUE;
}

BOOL CWnd::CreateEX()
{
	cout << "CWnd::CreateEX" << endl;
	PreCreateWindow();
	return TRUE;
}

BOOL CWnd::PreCreateWindow()
{
	cout << "CWnd::PreCreateWindow" << endl;
	return TRUE;
}

BOOL CFrameWnd::Create()
{
	cout << "CFrameWnd::Create" << endl;
	CreateEX();
	return 0;
}

BOOL CFrameWnd::PreCreateWindow()
{
	cout << "CFrameWnd::PreCreateWindow" << endl;
	return 0;
}

CWinApp * AfxGeApp()
{
	return theApp.m_pCurrentWinApp;
}
接下来的内容往往由编码者自己编写:

其中包含了主要的MFC程序的运转流程,代码如下:

#pragma once
//在这里在MFC.h的基础上多添加了2个类的定义
#include
#include"MFC.h"
using namespace std;
class CMyWinApp : public CWinApp
{
public:
	CMyWinApp::CMyWinApp(){}
	CMyWinApp::~CMyWinApp(){}

	virtual BOOL InitInstance();
};

class CMyFrameWnd : public CFrameWnd
{
public:
	CMyFrameWnd();
	~CMyFrameWnd() {};
};

#include"MY.h"
CMyWinApp theApp;  //全局对象

//最后代码之间的链接由链接器自动完成~~~,不过可以链接的前提是头文件中有对应实现的声明

BOOL CMyWinApp::InitInstance()
{
	cout << "CMyWinApp::InitInstance" << endl;
	m_pMainWnd = new CMyFrameWnd;
	return TRUE;
}

CMyFrameWnd::CMyFrameWnd()
{
	cout << "CMyFrameWnd::CMyFrameWnd" << endl;
	Create();
}

void main()
{
	CWinApp* pApp = AfxGeApp();

	pApp->InitApplication();
	pApp->InitInstance();
	pApp->Run();
	system("pause");
}

其中主函数main中的内容也一般被自动封装好了,当然这是后话。

运行的消息图是:

深入浅出MFC:MFC的程序的初始化过程_第1张图片

接下来基本口述一下这个过程吧,每个MFC程序都会有一个全局的WinApp对象theApp,该App对象实际建立的是我们自己的对象CMyWinApp , 不过由于是全局对象,所以这几个对象被创建的过程都没有被输出,这一个对象被创建后才会有后面的进入主逻辑main,着这个主逻辑中首先是InitApplication方法,之后就是该App对象的InitInstance方法(实例化),创建了一个对象CMyFrameWnd , 该CMyFrameWnd执行其子类CFrameWnd 的Create方法,在该CFrameWnd方法中又调用到了它的子类的CreateEX方法,至此应用程序的加载工作完成,最后则是程序的运行,其中包含了线程的调度,简而言之整个程序就是通过全局对象theApp来展开的,有theApp来负责所有的初始化工作并展开整个程序,这个全局对象是整个MFC程序运转的核心


你可能感兴趣的:(MFC)