用户可以为了特定的目的而定义自己的消息,这些消息也称为自定义消息。进行自定义消息的方法很简单,一般有两种:一种是利用ON_MESSAGE宏,另外一种就是创建自己的消息映射宏,这一种方法可以定制消息的参数类型,而不像前者只能使用固定的消息参数类型。但是一般情况下不需要定制消息的参数类型,因此这里对此不予介绍。本节主要介绍第一种比较常用的方法。
预定义常量值WM_USER(0x0400)是系统专门用来为实现处理用户自定义的消息而提供的接口,需要自定义消息时,只需要以如下形式定义即可:
WM_USER+X
其中X是一个非负整数值。另外,需要注意的是,用户自定义消息的值范围是有规定的,如6.1.3小节所述,其值介于WM_USER和0x7FFF之间,所以,为X取值时应该注意这个问题。下面结合具体的实例来详细介绍自定义消息的实现方法。
MFC自定义消息四部曲
1、定义消息变量
2、添加消息映射
3、添加消息处理函数
4、实现消息处理函数
1,3在类的头文件中设置
2,在DoDataExchange函数下进行声明
以Socket的Accept例:
1、定义消息变量
#define WM_USER_ACCEPT WM_USER+101
2、添加消息映射
BEGIN_MESSAGE_MAP(CSocketView, CDialog)
//{{AFX_MSG_MAP(CSocketView)
ON_MESSAGE(WM_USER_ACCEPT,OnAccept)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
3、添加消息处理函数
VC6.0
//{{AFX_MSG(CSocketView)
afx_msg void OnAccept(WPARAM wParam, LPARAM
VS2005
//{{AFX_MSG(CSocketView)
afx_msg LRESULT OnAccept(WPARAM wParam, LPARAM
lParam);
//}}AFX_MSG
4、实现消息处理函数
VC6.0
void CSocketView::OnAccept(WPARAM wParam, LPARAM lParam)
{
//函数体
}
VS2005
LRESULT CSocketView::OnAccept(WPARAM wParam, LPARAM lParam)
{
//函数体
}