1

可能重复:
为什么我的简单 C++ GUI 应用程序显示中文消息框?

我在 Visual C++ 中实现了如下代码块:

int nResult=MessageBox(NULL,
                       (LPCWSTR)"An example of Cancel,Retry,Continue",
                       (LPCWSTR)"Message Box!",
                        MB_ICONWARNING|MB_ABORTRETRYIGNORE);

但是,无论我尝试什么,它总是显示一个中文消息框!因此,我只想为我的问题寻求任何解决方案以及为什么这里有中文信息。谢谢!

4

3 回答 3

10

您忘记在字符串文字之前放置“L”。修改如下:

int nResult=MessageBox(NULL,
                   L"An example of Cancel,Retry,Continue",
                   L"Message Box!",
                   MB_ICONWARNING|MB_ABORTRETRYIGNORE);

在 C++ 中,unicode 字符串文字以L. 如果您不添加前缀,则强制转换为“unicode string constant”将无济于事,并会导致对内存位置的错误解释。

于 2012-05-27T03:14:14.743 回答
5

您期望将指针从一种类型转换为另一种类型以更改指向的值。这不是 C++ 强制转换所做的。他们只是告诉编译器假设指针指向新类型。要指定宽文本L请在引号之前使用(如果您的编译器支持,则使用新的字符串文本)。并摆脱演员表,它只是掩盖了错误。

于 2012-05-27T03:13:22.437 回答
4

正如大卫所说,您已将 ASCII 字符串转换为 UNICODE 字符串。请改用 _TEXT("Your string") 宏。

您不能只将 ASCII 字节解释为 UNICODE 字符串,否则会发生不好的事情。

编辑:此外,如果您想要 ASCII 字符串,您可以显式调用 MessageBoxA() 或在项目设置中更改为多字节字符设置。

于 2012-05-27T03:15:26.230 回答