gpt4 book ai didi

c++ - Unicode 文本在编辑框中显示为问号,即使我使用 SetWindowTextW()

转载 作者:太空狗 更新时间:2023-10-29 21:50:54 24 4
gpt4 key购买 nike

我遇到一个问题,即 unicode 文件名在我的编辑框中显示为问号。

当我在编辑框中粘贴 unicode 字符时,例如阿拉伯语或泰语,它们会正确显示,但在我运行此代码后,它们变成了问号。怎么会?

WCHAR buf[100];
GetWindowTextW(hWndEditBox, buf, 100);
SetWindowTextW(hWndEditBox, buf);

另一件事 - 该项目是 ANSI(我们有无法移植的代码,因此整个项目保持 ANSI),即 _UNICODE 宏未定义,但我明确使用文件名的 Unicode 版本。

最佳答案

GetWindowText 函数实际上向窗口 (hWndEditBox) 发送一个 WM_GETTEXT 消息。由于您使用的是 *A 函数而不是 *W 函数(我认为在这种情况下特别是 CreateWindowExA )您的消息循环将使用某些语言环境将宽字符转换为多字节字符。

这里您唯一的解决方案似乎是更改整个窗口设置 - 如果您的代码需要 ANSI 与 UI 无关,这应该是可能的。或者,您可以使用提供额外消息(例如 streaming )的丰富编辑框替换编辑框。

您可能需要检查是 GetWindowTextW 调用还是 SetWindowTextW 调用导致了错误的转换 - 如果 GetWindowTextW 工作正常您可以在设置之前使用正确的区域设置转换为多字节。

最后,您可以尝试在阅读文本之前调整线程的代码页,尽管这可能会导致各种其他问题。通常的建议是使用 Unicode。

来源:GetWindowTextthis comment来自 Raymond Chen 在他的博客上。

关于c++ - Unicode 文本在编辑框中显示为问号,即使我使用 SetWindowTextW(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4989820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com