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

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

  • 这是屏幕截图:

    winapi - 如何用东亚文本将Win32 RichEdit强制回退到SimSun?-LMLPHP

    字体是:
  • “阿哥”: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);
    

    最佳答案

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

    如文档中所述,这涉及用所需字体的特征以及与所需字符表示的语言环境相对应的LCID填充 CHARFORMAT2 structure

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

    Windows 8引入“Microsoft YaHei”字体作为简体中文脚本的默认UI字体,这是looks like to me。我认为(但不确定)SimSun曾经是此脚本的默认字体,因此如果您在某些系统而不是其他系统上看到此行为,则可以对此进行解释。

    关于winapi - 如何用东亚文本将Win32 RichEdit强制回退到SimSun?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34784110/

    10-09 21:36