我有一个Visual C ++ 6.0项目,我需要更新并将其导入Visual Studio 2012而没有任何问题,但是,在编译期间,我得到以下四个错误:
错误1错误C2440:' static_cast' :无法转换为' void (__thiscall CTrendDlg :: *)(int)' to' void(__thiscall CCmdTarget :: * )(UINT)' c:\ users \ nima \ desktop \ ffls_scode \ trenddlg.cpp 89
错误6错误C2440:' static_cast' :无法转换为' void (__thiscall CManualDlg :: *)(int)' to' void(__thiscall CCmdTarget :: * )(UINT)' c:\ users \ nima \ desktop \ ffls_scode \ manualdlg.cpp 175
错误7错误C2440:' static_cast' :无法转换为' void (__thiscall CManualDlg :: *)(int)' to' void(__thiscall CCmdTarget :: * )(UINT)' c:\ users \ nima \ desktop \ ffls_scode \ manualdlg.cpp 177
错误8错误C2440:' static_cast' :无法转换为' void (__thiscall CManualDlg :: *)(int)' to' void(__thiscall CCmdTarget :: * )(UINT)' c:\ users \ nima \ desktop \ ffls_scode \ manualdlg.cpp 178
第一个错误来自以下代码行,其余类似:
ON_COMMAND_RANGE(IDC_CHECK_PEN, IDC_CHECK_GRID, OnCheckButtons)
ON_COMMAND_RANGE(IDC_REF_L1, IDC_REF_L16, OnCarriagePos)
ON_COMMAND_RANGE(IDC_VALVE_L1, IDC_VALVE_L4, OnValve)
ON_COMMAND_RANGE(IDC_SAMPLE_L_A, IDC_SAMPLE_L_B, OnDetector)
OnCheckButtons
中TrendDlg.cpp
的{{1}}函数定义如下:
void CTrendDlg::OnCheckButtons(int id)
{
UINT state;
RECT rect = {m_rect.left-60, m_rect.top-10, m_rect.right+40, m_rect.bottom+30};
state = ((CButton*)GetDlgItem(id))->GetState();
if ((state & 0x0003) == 1)
{
switch (id)
{
case IDC_CHECK_PEN:
m_pen = TRUE;
break;
case IDC_CHECK_LINE:
m_line = TRUE;
break;
case IDC_CHECK_BUBBLES:
m_bubble = TRUE;
break;
case IDC_CHECK_GRID:
m_grid = TRUE;
}
}
else
{
switch (id)
{
case IDC_CHECK_PEN:
m_pen = FALSE;
break;
case IDC_CHECK_LINE:
m_line = FALSE;
break;
case IDC_CHECK_BUBBLES:
m_bubble = FALSE;
break;
case IDC_CHECK_GRID:
m_grid = FALSE;
}
}
InvalidateRect(&rect);
}
我的消息映射范围也定义为:
BEGIN_MESSAGE_MAP(CTrendDlg, CDialog)
为什么编译器会尝试将CTrendDlg
和CManualDlg
类型转换为CCmdTarget
类型?从VC 6.00到VS2012,课程结构是否有变化?
感谢您的帮助。
答案 0 :(得分:5)
您的处理程序应该像这样定义:
void CTrendDlg::OnCheckButtons(UINT id)
所以基本上将int
更改为UINT
答案 1 :(得分:2)
请在此处查看此宏ON_COMMAND_RANGE应如何使用:
1)您需要一个正确的签名,返回void
,参数应为UINT
2)使用班级名称验证您的方法:
ON_COMMAND_RANGE(IDC_CHECK_PEN, IDC_CHECK_GRID, &CTrendDlg::OnCheckButtons)
^^^^^^^^^^^^
VS 6.0相当陈旧,现代VS版本更符合标准。