如何更改此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'。
答案 0 :(得分:4)
新项目显然以Unicode模式编译,因此TCHAR
为wchar_t
,所有WinAPI函数都接受wchar_t
而不是char
(或指向它们的指针)。< / p>
更准确地说:在旧项目中扩展为MessageBox
的宏MessageBoxA
现在扩展为MessageBoxW
,MessageBoxA
接受指向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);