MFC程序执行流程

MFC的执行流程。
建立一个名为Test的MFC工程为例,一切均采用默认设置
1.你会看到CTestApp这个类,它继承自CWinApp,在CTestApp的构造函数下面,你会看到这样一条语句:CTextApp theApp;这是一个全局对象,一般书中都称它为应用程序对象,因为它是CWinApp的子类,CWinApp类中封装了一些与应用程序有关的方法。

2.全局对象的构造函数最先被执行,执行完毕后,才是主函数开始执行。执行CTestApp的构造函数,什么工作也不做,然后执行它的基类CWinApp的构造函数,为应用程序做一些准备工作,具体的细节看以查看MFC的源代码文件夹中的APPCORE.cpp文件中CWinApp的构造函数的实现。

3.执行到_tWinMain(见MFC的源代码文件夹中的APPMODUL.CPP)函数,它是MFC封装的主函数。_tWinMain中调用AfxWinMain函数。

4.AfxWinMain函数中。
4.1 调用AfxWinInit函数,主要工作有将_tWinMain传过来的四个参数赋值给CWinApp的四个相应的成员变量等,接着调用初始化线程的函数。
4.2 执行pApp->InitApplication(),pApp在CWinApp的构造函数中被赋值为this,也就是指向当前正在执行的CTestApp类的指针。但CTestApp类没有改写InitApplication(),所以调用它的基类CWinApp的InitApplication()。
4.3 执行pThread->InitInstance(),pThread在在CWinApp的构造函数中被赋值为this,于是调用CTestApp类的InitInstance()函数。

4.4 执行nReturnCode = pThread->Run()语句,进入消息循环。CTestApp没有改写Run函数,执行CWinApp::Run(),CWinApp::Run()中调用CWinThread::Run()。CWinThread::Run()的源代码中: 

if (!PumpMessage())

  return ExitInstance();
就是应用程序调用ExitInstance()的地方,此时它是被this调用的(如是其他的对象或类调用不能之单写一个函数名,要有其他信息.例如CWinApp::ExitInstance())。因此如果你在CTestApp中没有改写ExitInstance()函数,它会执行其默认实现。ExitInstance()会在应用程序发出WM_QUIT消息后,退出应用前被执行。WM_QUIT消息会在你单击程序窗口的关闭按钮,或在程序中主动调PostQuitMessage()函数时发出。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值