使用英文标题栏创建一个Win32 Window应用程序,但标题栏无处不在.怎么会?

Kar*_*arl 3 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
...
...
Run Code Online (Sandbox Code Playgroud)

我正在关注Win32 Window应用程序的教程.上面的代码用于设置窗口屏幕标题栏的名称.编译器对我大吼:"无法从'const char [12]'转换为'LPCWSTR'"所以好吧,我用"LPCWSTR"对我的字符串"MyTitleName"进行了编码,所有编译都很好.但是,在运行时,窗口屏幕的标题结果是中文字符.我尝试改变字符串,中文字符总是根据我的字符串改变.我正在使用XP Visual C++ 2008 Express Edition,我将英语(美国)作为非unicode程序的设置.我不明白.弦怎么变成中国人?

int*_*jay 9

您的应用程序正在编译为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
            ...
Run Code Online (Sandbox Code Playgroud)

如果要使用教程中的原始代码而不修改它,可以禁用unicode模式:在项目属性中,转到"常规"选项卡,然后设置Character SetUse Multi-Byte Character Set.不要为任何可能必须支持其他语言的程序执行此操作.


Han*_*ant 7

那是因为你的(LPCWSTR)演员.这只是关闭编译器,告诉你你做错了什么.该字符串仍然不是Unicode字符串,并且不会被强制转换转换.固定:

wcex.lpszClassName = L"MyTitleName";
wndHandle = CreateWindow(
              L"MyTitleName",     //the window class to use
              L"MyTitleName",     //the title bar text
Run Code Online (Sandbox Code Playgroud)