error C2440: “static_cast”: 无法从“LRESULT (__thiscall CMyReceiveDlg::* )(LPARAM,WPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
我把之前用VC++6.0上写的程序移植到VS2010或VS2012上时偶尔会碰到下面这种情况。
有这样的错误提示:
error C2440: “static_cast”: 无法从“LRESULT (__thiscall CMyReceiveDlg::* )(LPARAM,WPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
我看了下LPARAM、WPARAM、LRESULT的区别
例如:
声明:
LRESULT OnDrawItem(LPARAM lparam, WPARAM wparam);
定义:
LRESULT CMyReceiveDlg::OnDrawItem(LPARAM lparam, WPARAM wparam)
{
CMyProgressDlg dlg;
HWND pHwnd = this->GetSafeHwnd();
CWnd *pWnd=FindWindow(NULL,"Progress");
if(lparam == 1)
{
dlg.m_message = "正在连接邮箱服务器,\n请稍后……";
dlg.DoModal();
}
else if(lparam == 2)
{
pWnd->SendMessage(WM_CLOSE);
dlg.m_message = "连接成功,\n正在获取邮件……";
dlg.DoModal();
}
else if(lparam == 3)
{
pWnd->SendMessage(WM_CLOSE);
}
else if( lparam == 4)
{
int nListItem = m_list.InsertItem(i, (const char*)g_bstrFrom);
m_list.SetItem(nListItem, 1, LVIF_TEXT, (const char*)g_bstrSubject, 0, 0, 0, NULL);
m_list.SetItem(nListItem, 2, LVIF_TEXT, (const char*)g_oleDate.Format("%Y-%m-%d"), 0, 0, 0, NULL);
}
return 0;
}
错误提示:
error C2440: “static_cast”: 无法从“LRESULT (__thiscall CMyReceiveDlg::* )(LPARAM,WPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
我看了下LPARAM、WPARAM、LRESULT的区别
typedef UINT_PTR WPARAM; typedef LONG_PTR LPARAM; typedef LONG_PTR LRESULT;
解决方法:
将参数的顺序调换下即把
LRESULT OnDrawItem(LPARAM lparam, WPARAM wparam); //改成 LRESULT OnDrawItem(WPARAM wparam,LPARAM lparam);
同样把定义中的参数位置也相应的调换下就可以了。
浙公网安备 33010602011771号