MFC内部运行机制

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

1、第一步执行   CxxxxxAPP     theApp

2、调用CxxxApp的父类构造函数CWinApp,然后再调用自己的构造函数,CWinAppappcore.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的结果,也就是pThreadpApp都是当前程序的全局指针theApp

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

6、然后开始调用CreateWindow建立窗口,在CreateWindow中,还会调用子类(应用程序子类的preCreateWindow函数),因此可以在preCreateWindow中修改窗口的样式风格

7、然后执行到了InitInstance()中的ShowWindowUpdateWindow函数显示更新窗口

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值