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 模式下编译的,所以 TCHAR
是 wchar_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
。
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);
我应该如何更改此 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 模式下编译的,所以 TCHAR
是 wchar_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
。
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);