为什么C ++中的消息框显示中文消息

时间:2012-05-27 03:12:08

标签: c++ visual-studio-2010 winapi

  

可能重复:
  Why does my simple C++ GUI application show a message box in Chinese?

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

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

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

3 个答案:

答案 0 :(得分: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'将无济于事并导致错误地解释内存位置。

答案 1 :(得分:5)

您期望从一种类型转换为另一种类型的指针以更改指向的值。这不是C ++演员所做的。它们只是告诉编译器假设指针指向新类型。要指定wide literal,请在引号前使用L(如果编译器支持,则使用new string literals)。摆脱演员阵容,只是掩盖了这个错误。

答案 2 :(得分:4)

正如大卫所说,你已经将ASCII字符串转换为UNICODE字符串。请改用_TEXT(“你的字符串”)宏。

您不能将ASCII字节解释为UNICODE字符串,否则会发生错误。

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