关于MFC框架的一点理解和疑问。
我是一个刚刚入门的VC学生,我这个人学什么东西都爱追根问底,力求得到最圆满和深刻的理解,而事实上往往事与愿违。下面是我对MFC的框架的一点点理解,请大家给予指正,不胜感觉。
总体上来看,我觉得一个MFC的应用程序创建过程主要有两大步,首先是创建应用程序框架:CMyWinApp(这里我用My来指具体的用户创建的应用程序名称)以及其父类CWinApp CWinThread 和CCmdTarget CObject. 然后是创建窗口框架: CMyFrameWnd(泛指用户窗口类) CFrameWnd 和CWnd 然后又来到CCmdTarget 和CObject.也就是说CCmdTarget 和 CObject这两个类是被公用的,它们俩统一管理应用程序框架和窗口框架的创建. (一个负责维护应用程序,另一个负责管理命令响应????)
一个MFC的应用程序从一个全局变量theApp进入->由于CMyWinApp theApp->CMyWinApp 构造函数的调用->CWinApp构造函数的调用->CWinThread构造函数调用->CCmdTarget构造函数调用->CObject构造函数调用.到此该程序的应用程序框架部分已经被创建完成了.
然后进入WinMain()->保存指向该应用程序的一个CWinApp* 的指针->InitApplication() (我不清楚该函数内部到底做了些什么,以及为什么该函数是个虚函数? 后面别的继承类可以改写它么???) ->InitInstance() (从这里开始进行窗口框架的创建)->new CMyFrameWnd 并把指向它的指针保存到一个CWnd* 类型的指针中去了->引发CMyFrameWnd构造函数调用->CFrameWnd构造->CWnd构造->CCmdTarget构造函数调用->CObject构造函数调用.到此窗口框架部分已经创建起来了. 还没有完 然后->CMyFrameWnd构造函数中有Create() (我不清楚这个Create是CWnd的Create还是CFrameWnd的??? 书上说是CFrameWnd的,是不是CFrameWnd从CWnd继承来的一个virtual Create,然后改写了??? why???)
->Create中的CreateEx()->CreateEx中的PreCreateWindow(),由于PreCreateWindow是virtual,所以->
调用的是CFrameWnd::PreCreateWindow(). 到此应用程序的窗口框架已经创建好了.
然后继续执行WinMain()中的Run()方法->由于Run是virtual,所以调用的是CWinApp::Run()->由于CWinApp::Run()返回值调用了CWinThread::Run(),所以->CWinThread::Run(),消息循环.
疑问:
CWinThread::的InitInstance()干了什么?
CreateEx()并不是虚的?
其中Create()的调用,调用的是CWnd 的还是CFrameWnd的?还是CFrameWnd从CWnd中继承来得? (继承来的也需要再次声明么???)
请问我这里说的对不对阿? 哪位能把我不明白和不对的地方指出来呢?? ? 不胜感觉!!!