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

AVI*_*TTA 2 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Die*_*Epp 12

您正在调用Unicode函数但是传入ASCII文本.

这个演员是错的:

(LPCWSTR) "Yes, I remember Adlestrop"
Run Code Online (Sandbox Code Playgroud)

相反,使用L前缀,不要强制转换:

L"Yes, I remember Adlestrop"
Run Code Online (Sandbox Code Playgroud)

说明

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

TEXT()

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

TEXT("Yes, I remember Adlestrop")
Run Code Online (Sandbox Code Playgroud)

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

脚注

1:在Windows上.