MFC相关技术说明:<可参阅MSDN MFC TNO 5>
MFC 中通过通过不同于SDK的switch的方法来处理WINDOWS消息,
由消息映射表(Message Map)和虚函数多态来处理指定的窗体消息
1 声明一个消息映射表(Message Map)
在能处理消息的类中中添加宏
DECLARE_MESSAGE_MAP()
注 深入浅出 MFC中有更详尽系统的概述 这里只介绍几个宏定义
这个宏实现了3个功能 :
1 私有数据成员声明 AFX_MESSAGEMAP_ENTRY _messageEntries;数组
2 保护数据成员声明 AFX_MESSAGE_MAP _messageMap指向_messageEntrie数组
3声明并定义虚保护成员函数 GetMessageMap()用于得到 _messageMap的地址
宏的实现及相关的成员变量
注意 具有消息处理得类必须从 CCmdTarget派生而来
CCmdTarget派生的类至少可以处理 WM_COMMAND消息而只有消息的派发可以参看
CMDTARG.CPP中的函数实现 AFX_STATIC BOOL AFXAPI _AfxDispatchCmdMsg()派发消息的函数)
类具有处理窗体的消息必须要从 CWnd类中派生
以下是 CWnd及其派生类处理并派发消息的成员函数
CWnd::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)
2实现一个消息映射表
在类的实现文件中添加消息映射表
表头宏 BEGIN_MESSAGE_MAP(CMyClass, CBaseClass)
表未宏 END_MESSAGE_MAP()
在表中添加相关的宏可以实现过滤 拦截处理消息 否则消息会顺着消息映射表在类的派生结构中流向基类
2.1处理标准 WINDOW消息宏
(AfxMsg_.h的头文件中找到相关宏定义 )
在消息映射表中添加 ON_WM_xxx(xxx为消息名称