从Visual C++ 6.0转换到Visual Studio 2012的问题

Nim*_*and 2 c++ mfc visual-c++-2012

我有一个Visual C++ 6.0项目,我需要更新并将其导入Visual Studio 2012而没有任何问题,但是,在编译期间,我得到以下四个错误:

错误1错误C2440:'static_cast':无法从'void(__ thiscall CTrendDlg ::*)(int)'转换为'void(__thiscall CCmdTarget ::*)(UINT)'c:\ users \nima\desktop\ffls_scode\trenddlg.cpp 89

错误6错误C2440:'static_cast':无法从'void(__ thiscall CManualDlg ::*)(int)'转换为'void(__thiscall CCmdTarget ::*)(UINT)'c:\ users \nima\desktop\ffls_scode\manualdlg.cpp 175

错误7错误C2440:'static_cast':无法从'void(__ thiscall CManualDlg ::*)(int)'转换为'void(__thiscall CCmdTarget ::*)(UINT)'c:\ users \nima\desktop\ffls_scode\manualdlg.cpp 177

错误8错误C2440:'static_cast':无法从'void(__ thiscall CManualDlg ::*)(int)'转换为'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)
Run Code Online (Sandbox Code Playgroud)

其中(作为实例)OnCheckButtons函数的定义TrendDlg.cpp如下:

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);  
Run Code Online (Sandbox Code Playgroud)

}

我的消息映射范围也定义为:

  BEGIN_MESSAGE_MAP(CTrendDlg, CDialog)
Run Code Online (Sandbox Code Playgroud)

为什么编译器尝试投放CTrendDlgCManualDlg键入CCmdTarget类型?VC 6.00到VS2012的课程结构有变化吗?

我感谢您的帮助.

And*_*gin 5

您的处理程序应该像这样定义:

void CTrendDlg::OnCheckButtons(UINT id) 
Run Code Online (Sandbox Code Playgroud)

所以基本上int改为UINT