编写自定义消息映射的时候,VS编译器报错:
error C2440: “static_cast”: 无法从“LRESULT (__thiscall CSimpleThreadDlg::* )(void)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
原因是VC6项目移植到编译时检查更严格的VS2010上,需要针对源代码做出更改,解决方法很简单:
ON_MESSAGE消息在afxmsg_.h中有定义:
// for Windows messages
#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)) }
将不带参的函数声明、实现改为带上两个参数WPARAM,LPARAM:
1、
afx_msg LRESULT OnMsgFunc(WPARAM,LPARAM);
2、
LRESULT CSimpleThreadDlg::OnMsgFunc(WPARAM,LPARAM)
{
SetDlgItemInt(IDC_DATA, m_ThreadParam.nData);
return 1;
}
再次编译 成功~
还有一些编译错误是因为UNICODE,可以在工程设置里关闭UNICODE或者在对字符串使用_T()宏