MFC框架 的CWinApp执行介绍

其实MFC框架就是把WIN32的API进行了封装,使得使用和编写显得更加容易。

Win32Application的入口函数变成了WinMain,这个函数被放到了afxwin.h里面,这个函数,内部是这样执行的。

利用AfxGetModuleState获得模块对象。初始化模块对象的一部分成员。比如吧 hinstance赋值给modulestate的HINSTANCE 成员

调用 AfxGetThread获取主线程对象的指针(CWinThread*),

然后AfxGetApp获取应用程序对象 CWinApp* 如果CwinApp对象指针不为空就把WinMain传来的参数给App对象的成员。如果App为空就跳到初始化失败,程序执行完毕,否则调用App的InitApplication做初始化的工作(单是App里面的这个函数只返回TRUE,因为我们要继承这个类,所以所以可以添加自己的初始化代码)。

若初始化失败跳到最后,完毕。否则, 接下来调用CWinThread线程对象 pThread的InitInstance函数,若该函数返回FALSE,表示不需要进行消息循环,

那么就执行pThread的ExitInstance函数,跳到尾部,程序结束。若返回TRUE,表示要进行消息循环,调用pThread的Run();

Run()函数内部就实现了

(不是这样实现的,只是类似)

while(c=GetMessage(&Msg,NULL,0,0)&&c!=-1)

{

  TranslateMessage

 DispatchMessage

}

直到GetMessage返回0就退出循环。跳到最后。程序结束。

 

一个模块有一个AFX_MODULE_STATE对象,这个对象包含了模块句柄,资源句柄,以及特定线程的一些数据(TLS),还有AFX_THREAD_STATE对象,创建一个线程就有一个这样的对象,并且用线程本地存储的一个类模板(_afxthreadstate)保存。

CWinApp是继承于CWinThread的。多添加了LoadCursor LoadIcon这样的一些函数,InitApplication是CWinApp独有的

因此一个Win32Application 一定要有一个全局的App对象。这个对象继承于CWinApp

 还没有执行到WinMain的时候,就初始化这个App对象了,初始化的时候通过全局函数AfxGetModuleState等等函数来初始化自己的一些东西。并设置全局模块对象的一些东西,比如m_pCurrentWinapp;

 这样CWinApp的的功能基本完成了。

转载于:https://www.cnblogs.com/IamHuskar/archive/2012/11/01/2749533.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值