MFC-自定义消息

微软定义的消息都是小于WM_USER的,所以我们想要自定义消息这个ID就要大于WM_USER,也就是16进制大于WM_USER对应的16进制.自定义消息有两种

方法一:直接定义消息
1.

//只要大于WM_USER就行
#define WM_MY_MESSAGE (WM_USER+0x10)

2.写消息处理函数的声明

//这是规定的写法,写错了就映射不了了
afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam);

3.消息映射

ON_MESSAGE(WM_MY_MESSAGE,CMFCTESTDlg::OnMyMessage)

4.写函数体

LRESULT CMFCTESTDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
    //测试消息的Messagebox
    AfxMessageBox(TEXT("My message"));
    return 0;
}

5.触发消息

void CMFCTESTDlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知处理程序代码
    //两种发送消息的方法
    //PostMessage(WM_MY_MESSAGE);
    SendMessage(WM_MY_MESSAGE);
}

效果如图:
MFC-自定义消息_第1张图片

方法2:消息注册函数
1.

//定义为一个字符串等会传入注册消息函数
#define WM_MY_REGISTER_MESSAGE TEXT("My Register Message")

2.在构造函数中注册消息
返回的UINT定义为全局变量
UINT WM_MY_REGISTER_MSG = 0;

//注册消息,返回一个UINT的无符号整数 WM_MY_REGISTER_MSG = RegisterWindowMessage(WM_MY_REGISTER_MESSAGE);

3.消息函数声明

afx_msg LRESULT OnMyRegisterMessage(WPARAM wParam, LPARAM lParam);

4.消息映射

//注册消息要多加个REGISTERED
ON_REGISTERED_MESSAGE(WM_MY_REGISTER_MSG,CMFCTESTDlg::OnMyRegisterMessage)

5.写函数体

LRESULT CMFCTESTDlg::OnMyRegisterMessage(WPARAM wParam, LPARAM lParam)
{
    AfxMessageBox(TEXT("My Register Message"));
    return 0;
}

6.触发消息

void CMFCTESTDlg::OnBnClickedButton2()
{
    // TODO: 在此添加控件通知处理程序代码
    //两种发送消息的方法
    //PostMessage(WM_MY_MESSAGE);
    SendMessage(WM_MY_REGISTER_MSG);
}

效果如图:
MFC-自定义消息_第2张图片

你可能感兴趣的:(mfc,自定义消息,消息映射,WM-MESSAGE)