我的 Windows 上的代码页设置为 ANSI(Latin1、Windows-1252)。
我使用 CreateFont 创建字体并在 fdwCharSet 中传递 RUSSIAN_CHARSET
这是我的经历:
- 使用此字体的 Windows 控件(例如 Static)会忽略该字体的字符集:传递给 SetWindowTextA 的字符串以拉丁字符显示
- 在 DC 上选择此字体后,GDI 文本函数 (Ext)TextOutA 和 DrawTextA 将使用该字体的字符集。传递给它们的字符串以西里尔字母显示。
最佳答案
您必须将文本转换为 Unicode 并调用 SetWindowTextW()
而不是 SetWindowTextA()
。
确保窗口的类是通过 RegisterClassW()
注册的,而不是通过 RegisterClassA()
注册的。这才是真正决定窗口是否为 Unicode 的因素。您可以使用 IsWindowUnicode()
来验证窗口是否确实是 Unicode。
确保将未处理的消息传递给 DefWindowProcW()
而不是 DefWindowProcA()
。
或者,如果窗口是一个对话框,只需确保它是使用 CreateDialogW()
或 DialogBoxParamW()
创建的。
关于winapi - CreateFont的charset参数到底设置了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6387545/