分享

MFC内部运行机制

 乌拉拉1226 2011-01-07
、第一步执行   CxxxxxAPP     theApp
2、调用CxxxApp的父类构造函数CWinApp,然后再调用自己的构造函数,CWinApp在appcore.cpp文件中,再调用父类的构造函数CWinApp,把我们自己的应用程序类与MFC中的基类关联起来(BEGIN_MESSAGE_MAP(CBuffetTravelApp, CWinApp))。在CWinApp中 pModuleState->m_pCurrentWinApp=this; this就是theApp,我们的应用程序
3、这时候才进入WinMain函数 然后再调用AfxWinMain函数(在WINMAIN.CPP文件)
4、在AfxWinMain中获取我们应用程序的全局指针theApp,也就是在AfxWinMain.h中
CWinThread *pThread = AfxGetThread();
CWinApp *pApp = AfxGetApp();
AfxGetThread得到的就是AfxGetApp的结果,也就是pThread和pApp都是当前程序的全局指针theApp
5、获得了当前应用程序的当前指针调用 pThread->InitInstance();因为InitInstance是一个虚函数,子类重写了它,因此这时调用的是子类的函数InitInstance()完成应用程序的注册,显示等操作。注意在InitInstance中是通过ProcessShellCommand这个函数完成窗口的设计,注册等操作。注册窗口是通过调用AfxEndDeferRegisterClass完成注册操作。注册窗口时在正常情况下:是通过先调用子类PrecreateWindow调用父类PrecreateWindow再在调用AfxEndDeferRegisterClass来注册,如果是单文档(SDI)就会先执行一次AfxEndDeferRegisterClass注册
6、然后开始调用CreateWindow建立窗口,在CreateWindow中,还会调用子类(应用程序子类的preCreateWindow函数),因此可以在preCreateWindow中修改窗口的样式风格
7、然后执行到了InitInstance()中的ShowWindow和UpdateWindow函数显示更新窗口
8、这时AfxWinMain函数然后执行Run()函数就进入了消息循环, Run()函数在Thrdcore.cpp中
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/buaaxiao/archive/2010/09/30/5915752.aspx

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多