C ++中的Win32以中文显示...我做错了什么?

时间:2014-12-04 05:56:08

标签: c++ c winapi win32gui

我是win32和C ++的新手,我刚开始学习 按照在线教程编写了这段代码:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, (LPCWSTR) "Yes, I remember Adlestrop", (LPCWSTR) "A minimal windows program", MB_OK);
return 0;
}

但是当编译并运行代码时,在消息框中文本有点像中文... 我知道如果我没有提到正确的类型,输出可能是二进制或ASCCI或十六进制....但第一次结果是中文.. 谁能告诉我我做错了什么? ?

1 个答案:

答案 0 :(得分:12)

您正在调用Unicode函数,但是将ASCII文本传递给。

此演员错误:

(LPCWSTR) "Yes, I remember Adlestrop"

相反,请使用L前缀,而不是强制转换:

L"Yes, I remember Adlestrop"

说明

使用L作为字符串文字的前缀意味着文字将使用UTF-16 1 进行编码,并且元素类型为wchar_t而不是char。 Win32需要UTF-16,除非你#undef UNICODE通常是个坏主意。

TEXT()

您可能会看到使用TEXT()宏的代码。

TEXT("Yes, I remember Adlestrop")

这是一种旧方法,可以保持与Unicode可用之前编写的代码的兼容性。除非您要维护旧版应用程序,否则应避免使用TEXT()宏,并保留UNICODE。默认情况下,在最近版本的Visual Studio中定义UNICODE,因此通常无需自己定义它。

脚注

1 :在Windows上。