1

我正在动态(在运行时)创建一个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每次更改文本时调用都是一个问题,因为我需要在运行时不断更改文本,这可能会导致开销。有人有更好的解决方案吗?谢谢。

4

0 回答 0