C语言中的Win32 - 为什么我的文本显示为外语?

时间:2011-06-17 13:57:45

标签: c winapi locale

开始查看此网站上的win32 API:http://www.winprog.org/tutorial/start.html

我真的只是编译了第一个例子,它给了我一个中文/日文的消息提示,或者其他类似的东西。

问题:为什么?

显然,就我的理解而言,我应该得到“再见,残酷的世界!”在一个消息框中(大概名为'注意')。

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, "Goodbye, cruel world!", "Note", MB_OK);
return 0;
}

Foreign...

感谢。

3 个答案:

答案 0 :(得分:9)

尝试更改代码:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, L"Goodbye, cruel world!", L"Note", MB_OK);
return 0;
}

如果它的工作原因是你缺少一些指向正确API的标题,你似乎用ANSI字符串调用MessageBoxW(unicode版本)。如果这不仅仅是一个测试,而是你开始编写一个真实世界的程序,请考虑确保你想要使用什么样的字符(这通常是一个预编译器标志)。然后使用宏_T(使您的文字与unicode / ansi兼容。

从@Benoit编辑评论: 使用VS 2008/10启动新项目默认设置unicode字符集。

答案 1 :(得分:5)

MessageBox(NULL, _T("Goodbye, cruel world!"), _T("Note"), MB_OK);

MessageBoxA(NULL, "Goodbye, cruel world!", "Note", MB_OK);

答案 2 :(得分:1)

我无法将其设置为默认值,因此必须设置每个新项目。 要查找设置: 使用Visual Studio 2010 从主菜单→项目→属性→配置属性→常规→项目详细信息→字符集→“使用多字节字符集”(设置为“使用Unicode字符集”)

之后一切似乎都很好。