windows - 创建一个带有英文标题栏的 Win32 Window 应用程序,但标题栏突然变成了中文。怎么来的?

标签 windows string casting hwnd createwindow

HWND wndHandle; //global variable

// code snipped

WNDCLASSEX wcex;

// code snipped

wcex.lpszClassName = (LPCWSTR) "MyTitleName";

 // code snipped

wndHandle = CreateWindow(
            (LPCWSTR)"MyTitleName",     //the window class to use
            (LPCWSTR)"MyTitleName",     //the title bar text
...
...

我正在学习 Win32 窗口应用程序的教程。上面的代码用于设置窗口画面标题栏的名称。编译器对我大喊:“无法从‘const char [12]’转换为‘LPCWSTR’”好吧,我用 (LPCWSTR) 对字符串“MyTitleName”进行了类型转换,一切都编译得很好。但是,在运行期间,窗口屏幕的标题变成了汉字。我试着改变周围的字符串,汉字总是根据我的字符串以某种方式改变。我使用的是 XP Visual C++ 2008 Express Edition,我将英语(美国)作为非 unicode 程序的设置。我不明白。字符串怎么变成中文了?

最佳答案

您的应用程序正在编译为 unicode 应用程序(这在项目设置中定义)。这意味着您传递给 Windows API 函数的字符串需要是宽字符字符串,指定如下:L"MyTitleName"。您不能强制转换为 LPCWSTR,因为这实际上不会更改字符串类型,它只会尝试将字符串作为不是的字符串传递。

这段代码应该可以工作:

wcex.lpszClassName = L"MyTitleName";

 // code snipped

wndHandle = CreateWindow(
            L"MyTitleName",     //the window class to use
            L"MyTitleName",     //the title bar text
            ...

如果你想使用教程中的原始代码而不修改它,你可以禁用 unicode 模式:在项目属性中转到“常规”选项卡,并将 Character Set 设置为 使用多字节字符集。不要对某天可能必须支持其他语言的任何程序执行此操作。

关于windows - 创建一个带有英文标题栏的 Win32 Window 应用程序,但标题栏突然变成了中文。怎么来的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2111368/

相关文章:

c- 使用结构指针将字符串扫描到结构中

c++ - 字符串复制构造函数的段错误

java - 将字符串转换为 JInternalFrame

c# - 将文件流长度转换为 int

windows - 如何在 Windows 上安装 GnuPlot?

c++ - PeekMessage() 抛出未处理的异常(访问冲突)

windows - 如何使用 python 2.7 移动 Windows 桌面图标?

java-如何使用循环验证函数检查文本字段列表

c - 当我们将 int 类型转换为 double 时,存储 int 的实际地址是否会发生变化?

ruby-on-rails - 如何在 Windows PC(Windows 7/Windows 8)上部署 Rails 应用程序?