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上.
归档时间: |
|
查看次数: |
1311 次 |
最近记录: |