【发布时间】:2011-09-17 06:28:07
【问题描述】:
我的 Windows 上的代码页设置为 ANSI(Latin1,Windows-1252)。
我使用 CreateFont 创建字体并在 fdwCharSet 中传递 RUSSIAN_CHARSET
这是我的经历:
- 使用此字体的 Windows 控件(例如 Static)忽略字体的字符集:传递给 SetWindowTextA 的字符串以拉丁字符显示
- 在 DC 上选择此字体后,GDI 文本函数 (Ext)TextOutA 和 DrawTextA 使用该字体的字符集。传递给它们的字符串以西里尔字母显示。
为什么?什么时候考虑字体的字符集参数,什么时候忽略它?我可以强制 Windows 控件使用字体的字符集吗?
【问题讨论】:
-
是的,使用 SetWindowTextW()。当代码页为 1252 时,SetWindowsTextA() 无法将俄语文本正确转换为 ansi 字符串。它没有任何西里尔字符。
-
我知道使用宽字符是正确的做法,但在我的情况下很难做到(非常大且相当旧的系统)。我想知道为什么字体字符集设置对于 GDI 文本函数和 Windows 本身绘制的控件的工作方式不同。
-
看来我不应该使用任何 xxxA api。 Unicode 是个好东西。
标签: winapi internationalization fonts character-encoding gdi