下面的Windows Console程序是 MFC程序初始化过程的仿真,如下:
#include <iostream>
using namespace std;
// MFC类
class CObject{};
class CCmdTarget : public CObject{};
class CWinThread : public CCmdTarget
{
public:
virtual void InitInstance()
{
cout << "CWinThread::InitInstance \n";
}
virtual void Run() // 8
{
cout << "CWinThread::Run \n";
}
};
class CWnd;
class CWinApp : public CWinThread
{
public:
CWinApp* m_pCurrentWinApp;
CWnd* m_pMainWnd;
public:
CWinApp::CWinApp()
{
m_pCurrentWinApp = this;
}
virtual void InitApplication() // 第1个被调用
{
cout << "CWinApp::InitApplication \n";
}
virtual void InitInstance()
{
cout << "CWinApp::InitInstance \n";
}
virtual void Run() // 7
{
cout << "CWinApp::Run \n";
CWinThread::Run();
}
};
class CWnd : public CCmdTarget
{
public:
virtual void Create()
{
cout << "CWnd::Create \n";
}
void CreateEx()
{
cout << "CWnd::CreateEx \n"; // 5
PreCreateWindow();
}
virtual void PreCreateWindow() // 非6
{
cout << "CWnd::PreCreateWindow \n";
}
};
class CFrameWnd : public CWnd
{
public:
void Create() // 4
{
cout << "CFrameWnd::Create \n";
CreateEx();
}
virtual void PreCreateWindow() // 6
{
cout << "CFrameWnd::PreCreateWindow \n";
}
};
class CMyFrameWnd : public CFrameWnd
{
public:
CMyFrameWnd::CMyFrameWnd() // 3
{
cout << "CMyFrameWnd::CMyFrameWnd \n";
Create();
}
};
class CMyWinApp : public CWinApp
{
public:
virtual void InitInstance() // 2
{
cout << "CMyWinApp::InitInstance \n";
m_pMainWnd = new CMyFrameWnd; // 没考虑内存释放
}
};
CMyWinApp theApp; // 全局对象
CWinApp* AfxGetApp() // 全局函数
{
return theApp.m_pCurrentWinApp;
}
int main()
{
CWinApp* pApp = AfxGetApp();
pApp->InitApplication();
// CWinApp::InitApplication
pApp->InitInstance();
// CMyWinApp::InitInstance
// CMyFrameWnd::CMyFrameWnd
// CFrameWnd::Create
// CWnd::CreateEx
// CFrameWnd::PreCreateWindow (千万注意这个)
pApp->Run();
// CWinApp::Run
// CWinThread::Run
return 0;
}