MFC程序初始化过程

//MFC.h
#define	BOOL	int
#define	TRUE	1
#define FALSE	0


#include <iostream>
using namespace std;


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

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

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

	virtual BOOL InitInstance()
	{
		cout<<"CWinThread::InitInstance"<<endl;
		return TRUE;
	}
	virtual int Run()
	{
		cout<<"CWinThread::Run"<<endl;
		return 1;
	}
};


class CWnd;//声明

class CWinApp : public CWinThread
{
public:
	CWinApp *m_pCurrentWinApp;
	CWnd *m_pMainWnd;

public:
	CWinApp()
	{
		m_pCurrentWinApp = this;
	}
	~CWinApp()
	{
	}

	virtual BOOL InitApplication()
	{
		cout<<"CWinApp::InitApplication"<<endl;
		return TRUE;
	}

	virtual BOOL InitInstance()
	{
		cout<<"CWinApp::InitInstance"<<endl;
		return TRUE;
	}

	virtual int Run()
	{
		cout<<"CWinApp::Run"<<endl;
		return CWinThread::Run();
	}
};


class CDocument : public CCmdTarget
{
public:
	CDocumnt(){};
	~CDocument(){};
};

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

public:
	virtual BOOL Create();
	BOOL CreateEx();
	virtual BOOL PreCreateWindow();
};

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

public:
	virtual BOOL Create();
	virtual BOOL PreCreateWindow();
};

class CView : public CWnd
{
public:
	CView(){};
	~CView(){};
};

//global function
CWinApp* AfxGetApp();



//MY.h
#include "MFC.h"
#include <iostream>
using namespace std;

class CMyWinApp : public CWinApp
{
public:
	CMyWinApp(){};
	~CMyWinApp(){};

public:
	virtual BOOL InitInstance();
};


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


//MFC.cpp
#include "MY.h"

extern CMyWinApp theApp;//extern global object

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 TRUE;
}


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


CWinApp* AfxGetApp()
{
	return theApp.m_pCurrentWinApp;
}



//MY.cpp
#include "MY.h"

CMyWinApp theApp;//global object

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


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


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

	pApp->InitApplication();
	pApp->InitInstance();
	pApp->Run();
}
posted @ 2011-01-03 20:14  Cranny  阅读(612)  评论(0编辑  收藏  举报