MFC在WINMAIN前的初始化

本文介绍了MFC中全局变量和类的初始化过程,包括CNoTrackObject、AFX_MODULE_STATE、_AFX_BASE_MODULE_STATE等类的作用。重点讲解了MFC如何在创建窗口前通过AfxHookWindowCreate函数设置窗口消息起点,并探讨了线程状态、模块状态和线程局部变量的管理。文章还分析了动态链接MFC及OCX的过程,涉及DllMainCRTStartup、DllMain和_AfxGetOleModuleState等函数的作用。
摘要由CSDN通过智能技术生成

上个月有人问过MFC中一些全局变量的问题,最近工作中也是用到了MFC,所以追踪了下MFC的一些源码,查看了网上一些资料,在此作个小记录。

 

 

首先来认识几个类

 

这个类就重载了operator new和operator delete操作符。

 

 

 

 

class AFX_MODULE_STATE : public CNoTrackObject

列举下它的几个眼熟的成员变量:

CWinApp* m_pCurrentWinApp;

HINSTANCE m_hCurrentInstanceHandle;

HINSTANCE m_hCurrentResourceHandle;

LPCTSTR m_lpszCurrentAppName;

BYTE m_bDLL;    // TRUE if module is a DLL, FALSE if it is an EXE

BYTE m_bSystem; // TRUE if module is a "system" module, FALSE if not

。。。。。。

从这个类的部分注释和成员名称类型可以隐约判断出来实例指针,实例句柄、资源句柄、应用程序名称、是否为DLL模块、是否为系统模块等等。

可以去看一下它的构造函数对各成员变量的初始化。

 

 

 

 

class _AFX_BASE_MODULE_STATE : public AFX_MODULE_STATE

{

public:

#ifdef _AFXDLL

_AFX_BASE_MODULE_STATE() : AFX_MODULE_STATE(TRUE,

AfxWndProcBase, _MFC_VER)

#else

_AFX_BASE_MODULE_STATE() : AFX_MODULE_STATE(TRUE)

#endif

{ }

};

这个很明了了,进程状态看成是AFX_MODULE_STATE的特例吧。

AfxWndProcBase(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)

{

AFX_MANAGE_STATE(_afxBaseModuleState.GetData());

return AfxWndProc(hWnd, nMsg, wParam, lParam);

}

AfxWndProc是所有MFC窗口的消息起点,然后从它路由出去。

MFC在PreCreateWindow注册窗口类之后,在创建窗口之前,调用了AfxHookWindowCreate函数,这样每次创建窗口的时候,该函数就将窗口函数修改成AfxWndProc。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值