如何使用东亚文本强制Win32 RichEdit回退到SimSun?

时间:2016-01-14 07:46:35

标签: winapi fonts fallback

我在Window注册表中为我的字体设置了连接SimSun的字体 当我将该字体应用于我的richedit控件时,它具有以下行为:

  • 首先,它显示SimSun - ok
  • 当我添加不是CKJ unicode的文本,然后在CKJ中添加更多文本时,选择的字体窗口是Microsoft Ya Hei而不是SimSun

这是截图:

enter image description here

字体是:

  • “阿哥”:SimSun
  • “◎”:Segoe UI符号
  • “[āgē]đạica”Arial
  • “对兄长的称呼。”Microsft Ya Hei

在这种情况下,如何强制窗口选择SimSun而不是Microsft Ya Hei?

修改
感谢@Cody Gray的完美答案。这是工作代码:

CHARFORMAT2 cf2;

memset(&cf2, 0, sizeof(CHARFORMAT2));
cf2.cbSize = sizeof(CHARFORMAT2);
cf2.dwMask = CFM_FACE | CFM_SIZE | CFM_CHARSET | CFM_LCID;
cf2.lcid = 0x0804;
cf2.yHeight = 280;
cf2.bCharSet = CHINESEBIG5_CHARSET;
wcscpy(cf2.szFaceName, L"SimSun");
SendMessage(rtbhWnd, EM_SETCHARFORMAT, SCF_SELECTION | SCF_ASSOCIATEFONT, (LPARAM)&cf2);

cf2.cbSize = sizeof(CHARFORMAT2);
cf2.dwMask = CFM_FACE | CFM_SIZE | CFM_CHARSET | CFM_LCID;
cf2.lcid = 0x0409;
cf2.yHeight = 220;
cf2.bCharSet = ANSI_CHARSET;
wcscpy(cf2.szFaceName, L"Segoe UI");
SendMessage(rtbhWnd, EM_SETCHARFORMAT, SCF_SELECTION | SCF_ASSOCIATEFONT2, (LPARAM)&cf2);

1 个答案:

答案 0 :(得分:2)

您可以通过向RichEdit控件发送带有SCF_ASSOCIATEFONT标记的EM_SETCHARFORMAT message来设置字符表示的默认字体。

这包括填写具有所需字体特征的CHARFORMAT2 structure以及与所需字符表示的区域设置相对应的LCID,如文档中所述。

另请参阅:How to Use Font Binding in Rich Edit Controls

Windows {8},Windows 8引入了" Microsoft YaHei" font作为简体中文脚本的默认UI字体。我认为(但我不确定)SimSun曾经是这个脚本的默认字体,所以如果你在某些系统而不是其他系统上看到这种行为,那就可以解释它。