代码改变世界

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