怎么处理SendMessage()发来的消息 5
2015-10-15 · 知道合伙人教育行家
在类的声明处加入afx_msg打头的消息响应函数声明。
2.在cpp文件中实现该函数(参数依据你自己的设计,WPARAM和LPARAM都能传递数据,不用也可)。
3.在该类的DECLARE_MESSAGE_MAP与END_MESSAGE_MAP之间插入ON_MESSAGE(消息名,函数名)。
消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做TMsg,它在Windows单元中是这样声明的:
type
TMsg = packed record
hwnd: HWND; //窗口句柄
message: UINT;//消息常量标识符
wParam: WPARAM ;// 32位消息的特定附加信息
lParam: LPARAM ;// 32位消息的特定附加信息
time: DWORD;//消息创建时的时间
pt: TPoint; //消息创建时的鼠标位置
end ;
消息中有什么?
是否觉得一个消息记录中的信息像希腊语一样?如果是这样,那么看一看下面的解释:hwnd 32位的窗口句柄。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可
视对象的句柄(窗口、对话框、按钮、编辑框等)。message 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也
可以是自定义的常量。
wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。
lParam 通常是一个指向内存中数据的指针。由于WParam、lParam和Pointer都是32位的,因此,它们之间可以相互转换。
消息的映射至少需要以下三个步骤,1.在类的声明处加入afx_msg打头的消息响应函数声明。2.在cpp文件中实现该函数(参数依据你自己的设计,WPARAM和LPARAM都能传递数据,不用也可)。3.在该类的DECLARE_MESSAGE_MAP与END_MESSAGE_MAP之间插入ON_MESSAGE(消息名,函数名)。
如果想学习MFC的消息映射机制,唯有阅读其源码。在所有的应用程序框架中,MFC是唯一一个需要通过阅读源码深入理解其内部机制及原理的,否则无法独立开发基于MFC之APP。