第9 章 MFC的状态 MFC 定义了多种状态信息,这里要介绍的是模块状态、进程状态、线程状态
这些状态可以组合在一起,例如MFC 句柄映射就是模块和线程局部有效的,属于模块-线程状态的一部分
1 模块状态 这里模块的含义是:一个可执行的程序或者一个使用MFC DLL 的DLL,比如一个OLE 控件就是一个模块
一个应用程序的每一个模块都有一个状态,模块状态包括这样一些信息:用来加载资源的Window s 实例句柄、指向当前CWinApp 或者CWinThread 对象的指针、OLE 模块的引用计数、Window s 对象与相应的MFC 对象之间的映射
只有单一模块的应用程序的状态如图9-1所示
MFC 应用程序 线程对象 (Thread Object m_pModuleState )状态数据图9-1 (state data) 单模块状态示意图 m_pModuleState 指针是线程对象的成员变量,指向当前模块状态信息(一个AFX_MODULE_STATE 结构变量)
当程序运行进入某个特定的模块时,必须保证当前使用的模块状态是有效的模块状态──是这个特定模块的模块状态
所以,每个线程对象都有一个指针指向有效的模块状态,每当进入某个模块时都要使它指向有效模块状态,这对维护应用程序全局状态和每个模块状态的完整性来说是非常重要的
为了作到这一点,每个模块的所有入口点有责任实现模块状态的切换
模块的入口点包括:DLL 的输出函数;OLE/COM界面的成员函数;窗口过程
MFC 应用程序线程对象(Thread Object)m_pModu leState状态数据(state data)模块1(Modu le1)状(sta态数据te data)模块2(Modu le2)状(sta态数据te data)模块1 范围模块2 范围图9-2 多模块的状态示意图 在讲述窗口过程和