在学习<vc6.0技术内幕>过程中遇到要添加用户自定义消息的过程.我觉得书上写的比较散,于是就自己总结了这个基本过程,以为日后备查.
首先弄清楚两点:(1)谁要发送这个消息(2)谁要接受这个消息。
用一个简单的例子来说明。对象a向b(也可以就是a到a)发送消息。
1 发送消息
首先在a的头文件中定义这个消息:
#define wm_usermessage wm_user+30
所有自定义消息都是以wm_user消息为基础加上一个任意的自然数来表示的。a是向外发送消息的对象,因此在a的某个方法(函数)里就会调用用来发消息的函数b::sendmessage()/b::postmessage(),因为是b接受消息,因此是如上的形式。
2 接受消息
对象接受一个消息,应该有三部分:在头文件中有该消息的处理函数的原型;在实现文件中有接受消息映射的宏; 以及该消息的处理函数的具体实现。
2.1 头文件中加上自定义消息的处理函数原型
在declare_message_map()语句之前,一对afx_msg之间加上如下形式的函数原型:
afx_msg lresult onprocname( wparam wparam, lparam lparam );
对win32来说,wparam, lparam是传递消息最常用的手段。
2.2 在实现文件中加上接受消息映射的宏
在cpp文件里,begin_message_map语句之后,在一对afx_msg_map之间,增加 如下形式的代码:
on_message(wm_usermessage, onprocname)
上面是不用分号结尾的。
2.3 在实现文件中给出消息处理函数的具体实现。