【问题标题】:error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CImportProjectDlg::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint)'错误 C2440: 'static_cast' : 无法从 'UINT (__thiscall CImportProjectDlg::* )(CPoint)' 转换为 'LRESULT (__thiscall CWnd::* )(CPoint)'
【发布时间】:2017-02-24 15:31:59
【问题描述】:

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

这是我的代码 sn-p:

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() 行。

非常令人费解。

【问题讨论】:

    标签: visual-c++ upgrade


    【解决方案1】:

    OnNcHitTest 处理程序的正确签名是afx_msg LRESULT OnNcHitTest(CPoint);。你让它返回UINT 而不是LRESULT。

    【讨论】:

    • 我不清楚如何以及在何处将 UINT 更改为 LRESULT。
    • CImportProjectDlg 有一个名为 OnNcHitTest 的方法。此方法当前定义为返回UINT。将其更改为返回LRESULT。
    • 我觉得有点超出我的深度......我是否将声明:UINT CImportProjectDlg::OnNcHitTest(CPoint point) 更改为 LRESULT。还是我将返回码更改为 LRESULT?
    • 您将返回类型从UINT 更改为LRESULT,因此声明变为LRESULT CImportProjectDlg::OnNcHitTest(CPoint point)
    • 该函数可能在 .h 文件中声明,并在 .cpp 文件中定义。您已在一处更新,但未在另一处更新。更新两者。
    【解决方案2】:

    如果你需要让源代码在VC6和vs2008上都编译(很遗憾),你可以使用_MSC_VER来处理。

    完整列表here

    #if _MSC_VER >= 1500 // For vs2008+
    LRESULT
    #else
    UINT
    #endif
    
    CImportProjectDlg::OnNcHitTest(CPoint point)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      • 2017-08-13
      相关资源
      最近更新 更多