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);

同样把定义中的参数位置也相应的调换下就可以了。

 

posted @ 2013-03-29 15:45  haihai187  阅读(1210)  评论(0编辑  收藏  举报