ON_MESSAGE(WM_message,OnMyMessage);
OnMessage返回值必须为LRESULT,其形式为:afx_msg LRESULT OnMessage(WPARAM, LPARAM);
如果不符合,则有错误提示:error C2440: “static_cast”:无法从“void (__thiscall CMainFrame::* )(void)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
解决方法如下:首先,把原来的消息函数返回值类型改为LRESULT,函数内可以随便写个return 0;然后消息函数的参数必须改写成(WPARAM wParam,LPARAM lParam)。
例如:
一、自定义消息
首先,在MyXXXDlg..h头文件中,添加如下预定义消息ID
#define WM_RESULT WM_USER + 1 //自定义消息响应类型
WM_USER为windows系统为非系统消息保留的ID,这里至少要用100,因为其它控件的消息会占用一部分。
二. 定义消息处理函数。
消息处理函数为消息目标类的成员函数。同样在头文件中声明。
afx_msg LRESULT DisplayResult(WPARAM wParam, LPARAM lParam);//自定义消息响应函数
三.在MyXXXDlg.cpp中映射消息ID和消息处理函数
ON_MESSAGE(WM_RESULT,CTESTProDlg::DisplayResult) //自定义消息映射
四、在MyXXXDlg.cpp中实现消息处理函数
LRESULT CTESTProDlg::DisplayResult(WPARAM wParam, LPARAM lParam)
{
CString str;
double time = (double)lParam;
str.Format(L"第%d个素数为%d,参数值%f", 3, 4, time);
MessageBox(str);
return 0;
}
实验函数:
void MyXXXDlg::OnBnClickeonList()
{
this->PostMessageW(WM_RESULT,0, 23);
}
发送消息SendMessage函数在消息被处理之后才返回。
投递消息PostMessage并不等消息被处理就马上返回.
消息接收 PeekMessage与GetMessage不同的是,
函数GetMessage只有队列有消息时才返回,PeekMessage无论队列中是否有消息都会返回。函数获取到消息返回非零,否则返回零。
转载自:http://blog.csdn.net/xin_yu_xin/article/details/39538673
http://blog.sina.com.cn/s/blog_53a732bb0102wxee.html