一.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);
输出结果
五.TODO:后续其他Rich-edit Control类型相关问题再此贴继续更新笔记