MFC之代码跟踪

本文详细剖析了MFC程序从CStudyFrame.cpp中的全局变量CStudyFrameApp theApp开始,逐步深入到CWinApp、CWinThread等类的构造过程,探讨了CWinApp的构造函数、CWinThread的初始化以及消息循环的运行机制。通过跟踪代码,揭示了MFC应用程序与窗口、线程之间的关联以及C运行时库的交互。
摘要由CSDN通过智能技术生成

工程名为:StudyFrame

(1)  StudyFrame.cpp中CStudyFrame theApp; 这里声明了一个CWinApp的全局变量,因而会先进入到CWinApp的构造函数中。CStudyFrameApp类中定义了一个bool m_bHiColorIcons; 不知何用,在构造时赋成了true。回来后这个构造函数中只有一条语句m_bHiColorIcons =TRUE;暂不知何用。关键的来了,接下来会到哪里呢?我去,到了C运行时库了,这犀利了,我怎么跟踪。跳转(10)。

(2)  调用父类的构造函数,也就是CWinAppEx的构造函数,这个构造函数里仅仅是设置了一系列的初始值,没有另外生成对象,也没有调用别的什么函数。

(3)  CWinAppEx是CWinApp的子类,因而又调用CWinApp的构造函数,跳转(4)。回来后,设置了一系列的值,回到(1)。

(4)  CWinApp是CWinThread的子类,因而又调用CWinThread的构造函数,跳转(5)。回到CWinApp中,先给App赋名字CWinApp::CWinApp(LPCTSTRlpszAppName),是个带参数的构造函数。参数就是名字,当然可以是NULL。之后,调用全局函数AFX_MODULE_STATE*pModuleState = _AFX_CMDTARGET_GETSTATE();这又是一个什么结构体?反正是得到了一个状态对象。之后AFX_MODULE_THREAD_STATE*pThreadState =pModuleState->m_thread;这又是个什么结构体,得到了线程状态。pThreadState->m_pCurrentWinThread =this;线程状态的一个变量赋成了这个CWinApp。CWinApp的两个成员m_hThread = ::GetCurrentThread();m_nThreadID = ::GetCurrentThreadId();m_hThread,m_nThreadID是从CWinThread继承来的,代表了当前线程。又设置了一系列的值,包括一些定义为宏的函数。回到(3)。

(5)  CWinThread是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值