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/