各位大侠,急救!!!!

疯狂-的-蜗牛 2011-03-06 10:30:35
以前一直都是用的VC++6.0,感觉还行吧,就是觉得界面不太漂亮。于是就换了VS2008,可是实际中,VC++6.0中的好多代码到了VS2008里面就出错。晕死了!

我在其中添加了一句: ON_MESSAGE(MYWM_NOTIFYICON,OnNotifyIcon)
而这个函数是这样定义的:afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM lParam);
在VC++6.0里面没有任何错误,可以运行生成EXE文件,可是VS2008总是说错:
error C2440: “static_cast”: 无法从“void (__thiscall CMyPlayDlg::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
我也看不懂这是啥意思,希望各位指教。
我累得要死哎,还是没有解决……
初来者,分数不多,各位见谅。
呜呜~~~~(>_<)~~~~
...全文
96 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2011-03-07
  • 打赏
  • 举报
回复
afx_msg LRESULT OnNotifyIcon(WPARAM wParam, LPARAM lParam);

ON_MESSAGE(MYWM_NOTIFYICON, &CMyPlayDlg::OnNotifyIcon)

LRESULT CMyPlayDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
// ...
return 0;
}
无水先生 2011-03-07
  • 打赏
  • 举报
回复
LRESULT就是个ULONG,没啥神奇的。
ywwj5858792qd 2011-03-07
  • 打赏
  • 举报
回复
编译错误产生是因为新旧版本的MFC 中对ON_MESSAGE消息映射宏定义不同引起的,先看看老版本的MFC的ON_MESSAGE消息宏定义:

#define ON_MESSAGE(message, memberFxn) \
{ message, 0, 0, 0, AfxSig_lwl, \
(AFX_PMSG)(AFX_PMSGW)(LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM))&memberFxn },

再看看新版本的ON_MESSAGE定义:

#define ON_MESSAGE(message, memberFxn) \
{ message, 0, 0, 0, AfxSig_lwl, \
(AFX_PMSG)(AFX_PMSGW) \
(static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM) > \
(memberFxn)) },

注意,函数类型没有变化,都是:
LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM);
类型的函数指针(CWnd以及派生类的类成员函数指针),区别之处是新的ON_MESSAGE宏使用C++的 static_cast 操作符代替了C类型的强制转换。产生这两个错误其实是因为用户没有按照ON_MESSAGE宏的约定声明和定义消息响应函数造成的,
疯狂-的-蜗牛 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 visualeleven 的回复:]
afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM lParam);
-->
afx_msg LRESULT OnNotifyIcon(WPARAM wParam,LPARAM lParam);
[/Quote]
这样改了还是不行,可能与这个有关吧:我是在CDialog 的派生类CMyPlayDlg添加的这个函数CMyPlayDlg::OnNotifyIcon()
Eleven 2011-03-07
  • 打赏
  • 举报
回复
afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM lParam);
-->
afx_msg LRESULT OnNotifyIcon(WPARAM wParam,LPARAM lParam);
oldmtn 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 gongdiwudu 的回复:]
LRESULT就
是个ULONG,没啥神奇的。
[/Quote]

顶。。
蒋晟 2011-03-06
  • 打赏
  • 举报
回复
返回值应该是LRESULT不是void
VC6在消息映射中允许错误类型的函数是个bug。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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