MFC 程序运行过程

为防止原文删除不可寻,转载仅供个人查阅。尊重原创,请看原文。

原址:http://dvwt.blog.163.com/blog/static/34325470200862945919293/

----------------------------------------------------------------------------------------------------------------------------------------------------------

本文将简单解释MFC 程序的运行过程 , MFC程序入口在哪? 从何处开始执行,WinMain函数在何处?MFC 内部到底是怎么调用?

1、第一步执行   CxxxxxAPP     theApp

2、 调用CxxxApp的父类构造函数CWinApp,然后再调用自己的构造函数, CWinApp在appcore.cpp文件中

       再调用父类的构造函CWinApp完成了,把我们自己的应用程序类域MFC中的基类关联起来

       在CWinApp中 pModuleState->m_pCurrentWinApp=this; this机就是theApp,我们的应用程序这时候才进入WinMain函数 然后再调用AfxWinMain函数(在WINMAIN.CPP文件),

3、在AfxWinMain中获取我们应用程序的全局指针theApp,

       也就是在AfxWInMainh中    CWInThread *pThread=AfxGetThread();

                              CWinApp *pApp=AfxGetApp();

        AfxGetThread的得到的就是AfxGetApp的结果,也就是pThread和pApp都是当前程序的全局指针theApp

4, 获得了当前应用程序的当前指针调用 pThread->InitInstance();因为InitInstance是一个虚函数,子类重写了它,因此这时调用的实子类的函数InitInstance()完成应用程序的注册,显示等操作 
注意在InitInstance中是通过ProcessShellCommand这个函数完成窗口的设计,注册,等操作
注册窗口是通过调用AfxEndDeferRegisterClass完成注册操作注册窗口时在正常情况下:是通过先调用子类PrecreateWindow调用父类PrecreateWindow再在调用AfxEndDeferRegisterClass来注册,如果是单文档(SDI)就会先执行一次AfxEndDeferRegisterClass注册,

5、然后开始调用CreateWindow建立窗口,在CreateWindow中,还会调用子类

      (应用程序子类的preCreateWindow函数),因此可以在preCreateWindow中修改窗口的样式风格

6、然后执行到了InitInstance()中的ShowWindow和UpdateWindow函数显示更新窗口

7、这时AfxWinMain函数然后执行Run()函数就进入了消息循环,Run()函数在Thrdcore.cpp中

猜你喜欢

转载自blog.csdn.net/baixue0729/article/details/50493641