错误 C2440:'static_cast':无法从 'UINT (__thiscall CImportProjectDlg::* )(CPoint)' 转换为 'LRESULT (__thiscall CWnd::* )(CPoint)'

error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CImportProjectDlg::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint)'

我正在将 VC++6.0 项目转换为 Visual Studio 2008(前往 2014 年)。我遇到了上述错误。

这是我的代码片段:

BEGIN_MESSAGE_MAP(CImportProjectDlg, CDialog)
//{{AFX_MSG_MAP(CImportProjectDlg)
ON_WM_SIZE()
ON_WM_GETMINMAXINFO()
ON_WM_SIZING()
ON_WM_PAINT()
ON_WM_NCHITTEST()
ON_BN_CLICKED(IDC_MERGE_IN, OnAdd)
ON_BN_CLICKED(IDC_MERGE_OUT, OnRemove)
ON_BN_CLICKED(IDC_IMPORTPROJECT_CLEARALL, OnClearAll)
ON_BN_CLICKED(IDC_IMPORTPROJECT_APPLY, OnApply)
ON_BN_CLICKED(IDCANCEL,OnCancel)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

并且错误在 ON_WM_NCHITTEST() 行中指出。

很费解。

OnNcHitTest 处理程序的正确签名是 afx_msg LRESULT OnNcHitTest(CPoint);。你有 return UINT 而不是 LRESULT.

如果你需要让源代码同时在VC6和vs2008上编译(不幸的是),你可以使用_MSC_VER来处理。

完整列表here

#if _MSC_VER >= 1500 // For vs2008+
LRESULT
#else
UINT
#endif

CImportProjectDlg::OnNcHitTest(CPoint point)