090907(星期一)项目进展:学习MFC的消息映射
2009-09-07 20:49
447 查看
一、MFC消息映射
1 Message Mapping中重要的数据结构
l AFX_MSGMAP
struct AFX_MSGMAP
{
AFX_MSGMAP* pBaseMessageMap; //指向其基类MessageMap的指针,串化及上溯Message
AFX_MSGMAP_ENTRY* lpEntries; //Message Mapping的节点
};
l AFX_MSGMAP_ENTRY
struct AFX_MSGMAP_ENTRY // MFC 4.0
{
UINT nMessage; // windows message
UINT nCode; // control code or WM_NOTIFY code
UINT nID; // control ID (or 0 for windows messages)
UINT nLastID; // used for entries specifying a range of control id's
UINT nSig; // signature type (action) or pointer to message #
AFX_PMSG pfn; // routine to call (or special value)
};
l AFX_PMSG
typedef void (CCmdTarget::*AFX_PMSG)(void); //前面加上CCmdTarget:: 表示所指函数属于该类
2 Message Mapping中重要的宏
l DECLARE_MESSAGE_MAP()
#define DECLARE_MESSAGE_MAP() / //用在类的Declear之中
static AFX_MSGMAP_ENTRY _messageEntries[]; / //给类加一个static的数组变量
static AFX_MSGMAP messageMap; / //给类加一个static 的messageMap变量
virtual AFX_MSGMAP* GetMessageMap() const; //给类加一个返回messageMap的Get函数
l BEGIN_MESSAGE_MAP(theClass, baseClass)
#define BEGIN_MESSAGE_MAP(theClass, baseClass) / //用于实现,.cpp中
AFX_MSGMAP* theClass::GetMessageMap() const / //实现该类的Get MessageMap函数
{ return &theClass::messageMap; } /
AFX_MSGMAP theClass::messageMap = /
{ &(baseClass::messageMap), / //对messageMap属性赋值,第一参数是改类父类的messageMap属性
(AFX_MSGMAP_ENTRY*) &(theClass::_messageEntries) }; / //把自己的一个数据变量_messageEntries[]这个数组的指针给messageMap作为第二个变量值
AFX_MSGMAP_ENTRY theClass::_messageEntries[] = /
{ //对该类的_messageEntries[]数组赋值,以下将马上有ON_COMMAND宏装载其他的Message handle函数
l ON_COMMAND(id, memberFxn)
#define ON_COMMAND(id, memberFxn) / //用于实现,.cpp中,添加到该类的_messageEntries[]数组中,各种命令的添加就在这儿
{ WM_COMMAND, 0, (WORD)id, (WORD)id, AfxSig_vv, (AFX_PMSG)memberFxn },
l END_MESSAGE_MAP()
#define END_MESSAGE_MAP() / //是上面两个宏的结尾,用于循环的结束
{ 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } /
};
3 对Message Mapping用法的理解,优点的体会,以及MFC处理思想的学习
每个类利用宏定义的一个静态的属性static AFX_MSGMAP_ENTRY _messageEntries[]
来保存记录它要处理的命令,而且另一个静态的属性static AFX_MSGMAP messageMap 还有该类父类的messageMap指针,以便上溯。
1 Message Mapping中重要的数据结构
l AFX_MSGMAP
struct AFX_MSGMAP
{
AFX_MSGMAP* pBaseMessageMap; //指向其基类MessageMap的指针,串化及上溯Message
AFX_MSGMAP_ENTRY* lpEntries; //Message Mapping的节点
};
l AFX_MSGMAP_ENTRY
struct AFX_MSGMAP_ENTRY // MFC 4.0
{
UINT nMessage; // windows message
UINT nCode; // control code or WM_NOTIFY code
UINT nID; // control ID (or 0 for windows messages)
UINT nLastID; // used for entries specifying a range of control id's
UINT nSig; // signature type (action) or pointer to message #
AFX_PMSG pfn; // routine to call (or special value)
};
l AFX_PMSG
typedef void (CCmdTarget::*AFX_PMSG)(void); //前面加上CCmdTarget:: 表示所指函数属于该类
2 Message Mapping中重要的宏
l DECLARE_MESSAGE_MAP()
#define DECLARE_MESSAGE_MAP() / //用在类的Declear之中
static AFX_MSGMAP_ENTRY _messageEntries[]; / //给类加一个static的数组变量
static AFX_MSGMAP messageMap; / //给类加一个static 的messageMap变量
virtual AFX_MSGMAP* GetMessageMap() const; //给类加一个返回messageMap的Get函数
l BEGIN_MESSAGE_MAP(theClass, baseClass)
#define BEGIN_MESSAGE_MAP(theClass, baseClass) / //用于实现,.cpp中
AFX_MSGMAP* theClass::GetMessageMap() const / //实现该类的Get MessageMap函数
{ return &theClass::messageMap; } /
AFX_MSGMAP theClass::messageMap = /
{ &(baseClass::messageMap), / //对messageMap属性赋值,第一参数是改类父类的messageMap属性
(AFX_MSGMAP_ENTRY*) &(theClass::_messageEntries) }; / //把自己的一个数据变量_messageEntries[]这个数组的指针给messageMap作为第二个变量值
AFX_MSGMAP_ENTRY theClass::_messageEntries[] = /
{ //对该类的_messageEntries[]数组赋值,以下将马上有ON_COMMAND宏装载其他的Message handle函数
l ON_COMMAND(id, memberFxn)
#define ON_COMMAND(id, memberFxn) / //用于实现,.cpp中,添加到该类的_messageEntries[]数组中,各种命令的添加就在这儿
{ WM_COMMAND, 0, (WORD)id, (WORD)id, AfxSig_vv, (AFX_PMSG)memberFxn },
l END_MESSAGE_MAP()
#define END_MESSAGE_MAP() / //是上面两个宏的结尾,用于循环的结束
{ 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } /
};
3 对Message Mapping用法的理解,优点的体会,以及MFC处理思想的学习
每个类利用宏定义的一个静态的属性static AFX_MSGMAP_ENTRY _messageEntries[]
来保存记录它要处理的命令,而且另一个静态的属性static AFX_MSGMAP messageMap 还有该类父类的messageMap指针,以便上溯。
相关文章推荐
- MFC复习和学习 第二章 MFC消息映射 消息宏实现 消息分类
- 消息映射的作用机制---MFC学习 2
- MFC学习笔记之二----------MFC框架程序及消息映射
- mfc的消息映射学习笔记
- MFC学习笔记2_消息映射
- MFC学习小记(1) MFC的入口点与消息循环,消息映射
- 090914(星期一):MFC消息映射1
- MFC学习笔记之二----------MFC框架程序及消息映射
- MFC学习笔记——消息映射
- 孙鑫vc++学习(vs2008)笔记之第四课MFC消息映射、画图
- MFC学习笔记之消息映射机制
- MFC消息映射的学习
- MFC再学习(二)消息映射
- windows学习记录之MFC编程之自定义消息映射
- [技术学习]在Linux平台学习Windows开发技术(二)----给MFC程序来个消息映射
- 学习一下MFC消息机制
- MFC的消息处理机制由两部分组成:CCmdTarget类和消息映射表。
- (转载)MFC消息响应机制及映射机制…
- MFC消息映射宏详解
- 学习MFC的消息通信问题