2010 版 MFC 代码在 2013 年不再工作,有什么建议吗?

2010 version MFC code doesn't work anymore on 2013, any suggestions?

我应该如何更改此 vs2010 代码以在 vs2013 中工作?

这是 MFC 应用程序的一部分。我有两个带有 CString 变量 m_Name 和 m_Age 的编辑控件。还有一个打印按钮,如果单击它,它会在消息框上显示这两个信息。

void CMyProgramDlg::OnBUTTON_PRINT()
{
    UpdateData(TRUE);
    char szText[100];
    sprintf(szText, "Name: %s\n"\
                    "Age: %d",
                    m_Name, m_Age);
    MessageBox(szText, m_Name+"Message", NULL);

}

问题是 MessageBox() 不再接受 char。所以我转换为 CString。但新的问题是打印的消息只显示姓名和年龄的首字母。因此,如果我为姓名输入 'Jack',为年龄输入“40”,它只会显示 'J' 和“4”。

新项目显然是在 Unicode 模式下编译的,所以 TCHARwchar_t,并且所有 WinAPI 函数都接受 wchar_t 而不是 char(或指向它们的指针) .

更准确地说:在旧项目中扩展为 MessageBoxA 的宏 MessageBox 现在扩展为 MessageBoxW,其中 MessageBoxA 接受指向 [=13= 的指针], MessageBoxW 需要指向 wchar_t 的指针。所有接受字符串的 WinAPI "functions" 都存在此机制。

进入项目的项目属性并在 Configuration Properties -> C/C++ -> General 下设置 "Character Set" 不设置或多字节而不是 Unicode,然后它应该像以前一样运行。或者,使用 MessageBoxA 而不是 MessageBox 来显式调用 ANSI 版本,或者更改代码以便它在任何地方都使用 TCHAR

详情见https://msdn.microsoft.com/en-us/library/c426s321.aspx

VS 2013 不再支持 MBCS。所以你必须将你的代码转换为 UNICODE:

UpdateData(TRUE);
CString szText;
szText.Format(_T("Name: %s\nAge: %d"), m_Name, m_Age);
MessageBox(szText, m_Name + _T("Message"), NULL);