MFC自定义消息
2009-04-23 17:15 Iron 阅读(1038) 评论(0) 编辑 收藏 举报1.在类的声明文件中加入你的自定义消息响应函数格式为
afx_msg LRESULT OnFind(WPARAM wParam, LPARAM lParam);
要加在DECLARE_MESSAGE_MAP()宏之前(一般经验是这样,在vs2008下,加在其他地方也编译通过)
2.在类的实现文件中,首先注册消息
static UINT WM_FIND = RegisterWindowMessage(_T("YOURAPP_FIND_MSG"));
然后在BEGIN_MESSAGE_MAP(CMfctestDlg, CDialog)和END_MESSAGE_MAP()宏之间加入消息关联函数
ON_REGISTERED_MESSAGE(WM_FIND, OnFind)
3.实现消息响应函数
LRESULT CMfctestDlg::OnFind(WPARAM wParam, LPARAM lParam)
{
//::MessageBox(NULL,_T(""),_T("消息"),MB_OKCANCEL);
MessageBox(_T("自定义消息成功!"));
return 1;
}
4.发送自定义消息,调用自定义消息响应函数
SendMessage(WM_FIND);
完整代码如下:
……
static UINT WM_FIND = RegisterWindowMessage(_T("YOURAPP_FIND_MSG"));
BEGIN_MESSAGE_MAP(CMfctestDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_REGISTERED_MESSAGE(WM_FIND, OnFind)
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDOK, &CMfctestDlg::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &CMfctestDlg::OnBnClickedCancel)
ON_BN_CLICKED(IDC_BUTTON1, &CMfctestDlg::OnBnClickedButton1)
END_MESSAGE_MAP()
……
void CMfctestDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
SendMessage(WM_FIND);//触发自定义函数
}
LRESULT CMfctestDlg::OnFind(WPARAM wParam, LPARAM lParam)
{
//::MessageBox(NULL,_T(""),_T("消息"),MB_OKCANCEL);
MessageBox(_T("自定义消息成功!"));
return 1;
}
附:1.RegisterWindowMessage函数解释
http://blog.csdn.net/jiahehao/archive/2007/10/22/1837861.aspx
2.ON_REGISTERED_MESSAGE 宏
http://msdn.microsoft.com/en-us/library/wk5fe1k6(VS.80).aspx