接上一篇:MFC关键技术模拟(1)
http://blog.csdn.net/bzhou830/article/details/25505291 上次仿真了MFC的类层次结构,这次开始仿真MFC程序的初始化过程。首先给出类的继承和包含的函数图表。这种图表方式可能相比资源框里面的那种方式更加容易理解。
按照这个图表,在上一次的源码上添加成员函数。 mfc.h
my.h
这个运行结果和书上一致。下面来分析过程。 1、在程序进入main函数之前,构建了全局对象theApp,引发构造函数的执行。 2、进入main函数,CWinApp* pApp = AfxGetApp(); 这样pApp就指向了theApp全局对象。 3、 pApp->InitApplication();执行的是CWinApp::InitApplication(); 4、pApp->InitInstance();执行的是CMyWinApp::InitInstance(); 因为CWinApp的子类CMyWinApp对虚函数InitInsyance进行了改写。 ----CMyWinApp::InitInstance(); 中定义了 m_pMainWnd = new CMyFrameWnd;这样引发了CMyFrameWnd的构造函数的运行,当然之前会运行其父类的构造函数。 ----然而在CMyFrameWnd的构造函数中调用Create()函数,由于Create()是虚函数,并且在CMyFrameWnd类中也没有对其进行改写,所以引发CFrameWnd类的Create函数。 ---- CFrameWnd的Create函数又调用CreateEx()函数。他仅是一个父类成员函数,不是虚函数。所以就执行父类CWnd类的CreateEx(); ----CWnd类的CreateEx();中执行PreCreateWindow()函数,这又是一个虚函数,并且子类对其做了改写,那么就执行子类CFrameWnd的PreCreateWindow()函数。 5、pApp->Run();执行的是CWinApp::Run(); 至此,整个过程就完成了。里面涉及的主要是虚函数,确实体现出了虚函数特点和用途。 |
|