我正在动态(在运行时)创建一个CRichEditCtrl
控件,当我将文本设置为它时,字体与对话框中的其他控件(例如CStatic
- 参见图片)不同(我没有为富编辑使用任何格式控制)。区别最明显的是中文或日文等字母表中的字符。我尝试使用SetDefaultCharFormat
方法,但它没有达到我想要的效果。然后我发现,我首先需要将文本设置为富编辑控件,然后才能使用格式化功能。
// 1. dynamically created rich edit ctrl
CRichEditCtrl* dynamic_rich = new CRichEditCtrl();
dynamic_rich->Create(WS_CHILD | WS_TABSTOP | ES_LEFT | ES_MULTILINE | WS_VSCROLL |
WS_HSCROLL | ES_WANTRETURN | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL | ES_AUTOVSCROLL,
CRect(10, 0, 184, 23), this, 1234);
dynamic_rich->ModifyStyleEx(WS_EX_CLIENTEDGE, 0, SWP_DRAWFRAME);
dynamic_rich->SetWindowTextW(L"アラビア語"); // calling it here results in the 3rd picture
// which is the closest to the desired result, though it's still not the same as in CStatic
CHARFORMAT cf = { 0 };
dynamic_rich->GetDefaultCharFormat(cf);
_tcscpy_s(cf.szFaceName, L"MS Shell Dlg 2");
cf.dwMask = CFM_FACE;
dynamic_rich->SetDefaultCharFormat(cf);
// 2. statically created rich edit ctrl - defined in .rc file
CRichEditCtrl* static_rich = (CRichEditCtrl*)this->GetDlgItem(IDC_RICHEDIT);
static_rich->SetWindowTextW(L"アラビア語");
// 3. statically created cstatic - for the font comparison
CStatic* label = (CStatic*)this->GetDlgItem(IDC_STATIC);
label->SetWindowTextW(L"アラビア語");
当我离开默认字体(不调用SetDefaultCharFormat
) - 似乎模糊
当我打电话时SetDefaultCharFormat
,然后设置文本-结果相同
当我设置文本时,然后调用SetDefaultCharFormat
- 不完全相同,但关闭
富编辑控件中的字体仍然看起来与中CStatic
的不同(似乎有点不同而且更大),但我可以接受。SetDefaultCharFormat
每次更改文本时调用都是一个问题,因为我需要在运行时不断更改文本,这可能会导致开销。有人有更好的解决方案吗?谢谢。