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

时间:2015-02-14 12:41:19

标签: c++ visual-studio-2010 mfc

如何更改此vs2010代码才能在vs2013中使用?

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

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。但新问题是打印的消息只显示名称和年龄的第一个字母。所以如果我把'杰克'换成名字,把'40'换成年龄,它只显示'J'和'4'。

2 个答案:

答案 0 :(得分:4)

新项目显然以Unicode模式编译,因此TCHARwchar_t,所有WinAPI函数都接受wchar_t而不是char(或指向它们的指针)。< / p>

更准确地说:在旧项目中扩展为MessageBox的宏MessageBoxA现在扩展为MessageBoxWMessageBoxA接受指向char的指针, MessageBoxW期望指向wchar_t。这种机制适用于所有WinAPI&#34;功能&#34;接受字符串。

进入项目的项目属性并设置&#34;字符集&#34;在配置属性下 - &gt; C / C ++ - &gt;一般不设置或多字节而不是Unicode,那么它应该像以前一样。或者,使用MessageBoxA代替MessageBox显式调用ANSI版本,或更改代码以便在任何地方使用TCHAR

有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/c426s321.aspx

答案 1 :(得分:1)

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);