一.Rich-edit Control添加后窗口会不显示

需要在初始化命令InitInstance内加入以下代码

AfxInitRichEdit();

二.Rich-edit Control设置属性和字体的例子

然后根据组件ID添加属性,应为我的Rich-edit Control是在标签组件下的嵌入窗口内,所以代码可以根据自身情况修改,这里为了说明问题全部用中文变量,理解意思后自行修改

//获取Rich-edit Control组件指针 P_日志
CRichEditCtrl* P_日志 = (CRichEditCtrl*)m_Tab_shezhi2.GetDlgItem(IDC_RICHEDIT21);
//定义CHARFORMAT字体类型并清空
CHARFORMAT 日志字体;
ZeroMemory(&日志字体, sizeof(日志字体));
日志字体.cbSize = sizeof(日志字体);
日志字体.yHeight = 200;                         //字体的大小(并非我们常见的字号概念)
//设置属性,只有标注的属性才可以修改
日志字体.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE | CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
//把CHARFORMAT字帖的结构体赋值给Rich-edit Control组件
P_日志->SetDefaultCharFormat(日志字体);   
//设置Rich-edit Control组件的背景色
P_日志->SetBackgroundColor(FALSE, RGB(0, 0, 0));
//由于上面已经把结构体的属性通过SetDefaultCharFormat对Rich-edit Control组件设置过了,这里后面我只需要修改字体颜色 所以只开放了CFM_COLOR,避免在后面每次设置
日志字体.dwMask = CFM_COLOR;
//这个是自己写的简易输出内容的Dome
日志_打印(0, _T("程序初始化"));

三.日志打印Dome

void 日志_打印(int 索引, TCHAR* 内容格式, ...)
{
    va_list args;
    va_start(args, 内容格式);
    int len = _vsctprintf(内容格式, args);
    CString 输出内容, 构造内容, 时间显示;
    if (len > 0)
    {
        len += (1 + 2);
        PTCHAR buf = (PTCHAR)malloc(sizeof(TCHAR) * len);
        if (buf)
        {
            len = _vstprintf_s(buf, len, 内容格式, args);
            if (len > 0)
            {
                while (len && _istspace(buf[len - 1])) len--;
                buf[len++] = _T('\r');
                buf[len++] = _T('\n');
                buf[len] = 0;
                构造内容 = buf;
            }
            free(buf);
        }
        va_end(args);
    }
    if (日志时间开关)
    {
        SYSTEMTIME tm;
        GetLocalTime(&tm);
        日志字体.crTextColor = RGB(255, 0, 0);
        时间显示.Format(_T("%02d日%02d时%02d分%02d秒=>"),  tm.wDay, tm.wHour, tm.wMinute, tm.wSecond);
        P_日志->SetWordCharFormat(日志字体);
        P_日志->SetSel(-1, -1);
        P_日志->ReplaceSel(时间显示);
    }
    日志字体.crTextColor = RGB(84, 234, 21);
    if (索引 == 0)
    {
        输出内容.Format(_T("主进程=>%s"), 构造内容);
    }
    else
    {
        输出内容.Format(_T("线程%d=>%s"), 索引, 构造内容);
    }
    //构造数据
    P_日志->SetWordCharFormat(日志字体);
    P_日志->SetSel(-1, -1);
    P_日志->ReplaceSel(输出内容);
    P_日志->PostMessage(WM_VSCROLL, SB_BOTTOM, 0);
    return;
}

四.测试效果

测试代码

日志_打印(0, _T("程序初始化"));
日志_打印(0, _T("测试函数内格式化字符型:%s,数值型:%s"),_T("我是字符"),100);

输出结果

QQ截图20240205014254.png

五.TODO:后续其他Rich-edit Control类型相关问题再此贴继续更新笔记

Last modification:February 5, 2024
如果觉得我的文章对你有用,请收藏