我正在使用以下内容在Win32 API的
MessageBox
中打印一条消息:MessageBox(hWnd, TEXT("Já existe um controlador em execução"), TEXT("Erro"), 0);
MessageBox
是一个宏,它正在扩展为 MessageBoxW
。问题在于它不会打印 Unicode,而调用它的窗口可以毫无问题地打印 Unicode,这似乎是 MessageBox
本身的问题。
有人知道如何解决吗?
另外,我还尝试过:
MessageBoxEx(hWnd, TEXT("Já existe um controlador em execução"), TEXT("Erro"), 0, MAKELANGID(LANG_PORTUGUESE, SUBLANG_PORTUGUESE));
但是结果如预期一样。
以下是扩展调用的图片:
并且它打印:
请注意,主窗口菜单中有正确打印的Unicode字符。
L"..."
无法编译,那就意味着MessageBox
解析为MessageBoxA
,尽管您声称它是 Unicode。无论如何,您说对话框没有打印 Unicode,那么它到底打印了什么?您能提供一张截图吗? - Remy LebeauL" .... "
期望的是UTF-16编码。尝试将文件保存为UTF-16,并检查保存后文件的内容以及程序运行时发生的情况。L"..."
字符串字面值的类型是const wchar_t[N]
,其中N是执行宽编码中字符串的代码单元大小,包括空终止符。参考链接:https://en.cppreference.com/w/cpp/language/string_literal - Richard CrittenUTF-16 LE
,现在它可以正常工作了,很好地发现了问题,我很乐意接受你的答案,这可能与我在其他任何地方都没有找到类似的帖子有关。 - anastaciuW
后缀的 Windows 函数(如果需要),并显式将我的 UTF-8 文本转换为 UTF-16(使用相应的函数和即时转换)。这可能看起来过于工程化或老派,但像你遇到的问题正是我试图避免的。;-) - Scheff's Cat