如何使用东亚文本强制 Win32 RichEdit 回退到 SimSun?
How to force a Win32 RichEdit fallback to SimSun with East Asian text?
我在 Window 注册表中为我的字体设置了链接到 SimSun 的字体。
当我将该字体应用于我的 richedit 控件时,它具有以下行为:
- 首先,它显示 SimSun - ok
- 当我添加非 CKJ unicode 的文本,然后在 CKJ 中添加更多文本时,选择的字体 window 是微软雅黑而不是 SimSun
截图如下:
字体是:
- "阿哥": SimSun
- "◎": 色格UI 符号
- [āgē] đại ca" Arial
- "对兄弟长的称呼。"微软雅黑
在这种情况下如何强制window选择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 控件发送带有 SCF_ASSOCIATEFONT
标志的 EM_SETCHARFORMAT
message 来设置字符表示的默认字体。
这涉及到 CHARFORMAT2
structure 填写所需字体的特征以及与所需字符表示的区域设置相对应的 LCID,如文档中所述。
另请参阅:How to Use Font Binding in Rich Edit Controls
looks like to me Windows 8 引入了 "Microsoft YaHei" 字体作为简体中文脚本的默认 UI 字体。我认为(但我不确定)SimSun 曾经是此脚本的默认字体,所以如果您在某些系统上看到此行为而不是其他系统,这将解释它。
我在 Window 注册表中为我的字体设置了链接到 SimSun 的字体。
当我将该字体应用于我的 richedit 控件时,它具有以下行为:
- 首先,它显示 SimSun - ok
- 当我添加非 CKJ unicode 的文本,然后在 CKJ 中添加更多文本时,选择的字体 window 是微软雅黑而不是 SimSun
截图如下:
字体是:
- "阿哥": SimSun
- "◎": 色格UI 符号
- [āgē] đại ca" Arial
- "对兄弟长的称呼。"微软雅黑
在这种情况下如何强制window选择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 控件发送带有 SCF_ASSOCIATEFONT
标志的 EM_SETCHARFORMAT
message 来设置字符表示的默认字体。
这涉及到 CHARFORMAT2
structure 填写所需字体的特征以及与所需字符表示的区域设置相对应的 LCID,如文档中所述。
另请参阅:How to Use Font Binding in Rich Edit Controls
looks like to me Windows 8 引入了 "Microsoft YaHei" 字体作为简体中文脚本的默认 UI 字体。我认为(但我不确定)SimSun 曾经是此脚本的默认字体,所以如果您在某些系统上看到此行为而不是其他系统,这将解释它。