消息映射参数问题

Mylovesting 2009-09-06 02:03:54
以下是我在网上看到的一片帖子,我今天也遇到了同样的问题,可是网上没有解决的方法,我弄了半天也不知道怎么办 ,在这里希望得到各位大侠的帮助,急救啊。
a. ON_MESSAGE(message,OnMyMessage);
OnMyMessage返回值必须为LRESULT,其形式为:afx_msg LRESULT OnMyMessage(WPARAM, LPARAM);如果不符合,则有错误提示:

error C2440: “static_cast”: 无法从“void (__thiscall CPppView::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
在匹配目标类型的范围内没有具有该名称的函数
error C2440: “static_cast”: 无法从“void (__thiscall CPppView::* )(void)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
在匹配目标类型的范围内没有具有该名称的函数
b. ON_COMMAND_EX(id,OnMyMessage2);
在VS2005中,OnMyMessage返回值必须为BOOL,且含有一个 UINT 参数指出了命令ID,其形式为:afx_msg BOOL OnMyMessage(UINT);如果不符合,
则有错误提示,如在VS6中,OnMyMessage2的定义为afx_msg BOOL OnViewZoomBar()时亦可正常编译通过,但在VS2005下,有错误提示:

error C2440: “static_cast”: 无法从“BOOL (__thiscall CMainFrame::* )(void)”转换为“BOOL (__thiscall CCmdTarget::* )(UINT)”
在匹配目标类型的范围内没有具有该名称的函数
 error C2440: “static_cast”: 无法从“BOOL (__thiscall CMainFrame::* )(void)”转换为“BOOL (__thiscall CCmdTarget::* )(UINT)”
在匹配目标类型的范围内没有具有该名称的函数


就是这个参数怎么办?为什么总会报错呢?
...全文
58 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaopch 2009-09-18
  • 打赏
  • 举报
回复
把 void OnRecvData(WPARAM wParam,LPARAM lParam) 修改为 LRESULT OnRecvData(WPARAM wParam,LPARAM lParam) 应该也可以

这样做可以,在OnRecvData的消息定义出也要做相应得修改
Mylovesting 2009-09-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zgl7903 的回复:]
把 void OnRecvData(WPARAM wParam,LPARAM lParam) 修改为 LRESULT OnRecvData(WPARAM wParam,LPARAM lParam) 应该也可以
[/Quote]

这个方法好像不可以啊
zgl7903 2009-09-06
  • 打赏
  • 举报
回复
把 void OnRecvData(WPARAM wParam,LPARAM lParam) 修改为 LRESULT OnRecvData(WPARAM wParam,LPARAM lParam) 应该也可以
zgl7903 2009-09-06
  • 打赏
  • 举报
回复
LRESULT CxxxxClass :: WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if(message == WM_RECVDATA)
{
OnRecvData(wParam, lParam);
}

return CxxxxClass :: WindowProc(message, wParam, lParam);

}
Mylovesting 2009-09-06
  • 打赏
  • 举报
回复
报错的是这一行 ON_MESSAGE(WM_RECVDATA,OnRecvData)
错误内容是: error C2440: “static_cast”: 无法从“void (__thiscall CChatDlg::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
OnRecvData的函数原型是:OnRecvData(WPARAM wParam,LPARAM lParam)
{
CString str=(char*)lParam;
CString strTemp;
GetDlgItemText(IDC_EDIT_RECV,strTemp);
str+="\r\n";
str+=strTemp;
SetDlgItemText(IDC_EDIT_RECV,str);
}

如何解决?
zgl7903 2009-09-06
  • 打赏
  • 举报
回复
重载 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
根据message来调用编译提示ON_MESSAGE类型不配的消息映射函数
arong1234 2009-09-06
  • 打赏
  • 举报
回复
要注意要求第一种情况下必须返回值类型为LRESULT,第二种情况必须返回BOOL,且带一个UINT的参数

arong1234 2009-09-06
  • 打赏
  • 举报
回复
你到底遇到哪个错?所谓的“就是这个参数”是指哪个参数?贴了这么多东西不知道你的问题在哪

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧