探索MFC全局函数-AfxGetApp()

MFC做到了从C/SDK开发Win32程序到利用OOP思想开发Win32程序的过渡,它的封装完美体现的C++的三大特性,提高了Win32程序的开发效率,但它的封装也使得本来清晰的脉络,变得晦涩起来。

今天我们探究被微软冠以Afx前缀的全局函数AfxGetApp(),这个函数作用是获取当前应用进程的指针,确切的说是获取由CWinApp派生出类的对象,相信懂MFC的人都熟知,但作为全局函数的它是如何在基类获取的派生类对象的?

现在我们开始一步一步揭开AfxGetApp()神秘面纱~

(1)AfxGetApp()

函数的声明在AFXWIN.H,定义在AFXWIN1.INL

_AFXWIN_INLINE CWinApp* AFXAPI AfxGetApp() 
 { return afxCurrentWinApp; }

afxCurrentWinApp是一个宏,定义在AFXWIN.H中

#define afxCurrentWinApp    AfxGetModuleState()->m_pCurrentWinApp

(2)AfxGetModuleState()

其返回值为AFX_MODULE_STATE类指针,声明在AFXSTAT_.H

AFX_MODULE_STATE* AFXAPI AfxGetModuleState();

定义在AFXSTATE.CPP

AFX_MODULE_STATE* AFXAPI AfxGetModuleState()
{
 _AFX_THREAD_STATE* pState = _afxThreadState;
 AFX_MODULE_STATE* pResult;
 if (pState->m_pModuleState != NULL)
 {
  // thread state's module state serves as override
  pResult = pState->m_pModuleState;
 }
 else
 {
  // otherwise, use global app state
  pResult = _afxBaseModuleState.GetData();
 }
 ASSERT(pResult != NULL);
 return pResult;
}

AfxGetModuleState函数的定义中,可以看出函数返回的是pState->m_pModuleState或者_afxBaseModuleState.GetData();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值