MFC之Edit控件循环显示日志
琢磨这个问题比较久了。之前一直搜索“Edit控件循环显示”结果找不到答案,今天搜索Edit显示日志,找到了一个好方法,做了一些修改说明。1、添加控件,设置控件属性:勾选Multiline、Want return 、Read-only2、class wizard 添加控件成员变量 CEdit m_edit13、添加存储日志信息的容器:在添加CString成员 CString str4...
琢磨这个问题比较久了。之前一直搜索“Edit控件循环显示”结果找不到答案,今天搜索Edit显示日志,找到了一个好方法,做了一些修改说明。
1、添加控件,设置控件属性:勾选Multiline、Want return 、Read-only
2、class wizard 添加控件成员变量 CEdit m_edit1
3、添加存储日志信息的容器:在添加CString成员 CString str
4、添加日志函数声明;
void tip( CString s);
4、添加tip日志函数(m_edit1为edit控件变量名),添加下面的代码。
void C*******Dlg::tip( CString s)
{
UpdateData(TRUE); //用于从控件中同步内容到程序
//当然此行还可以进行添加时间头的处理,这里不做赘述。
str += s; //原有日志加上新日志(提示)信息
str += _T("\r\n"); //添加换行符
m_edit1.SetWindowText(str);
m_edit1.LineScroll(m_edit1.GetLineCount());
UpdateData(FALSE); //用于从程序中同步内容到控件
//日志容器过大时清空一次。此时可选择先写入进txt或log日志文件后在清空。
int size = sizeof(str);
if (size > 1024)
str.Empty();
}
5、函数调用:
tip(“这一条为测试日志”);
6、注意事项:
①在用str和m_edit1关联一个edit控件时,在UpdateData(TRUE)之前,不论str做了何种修改,str都将会重新置为控件内真正包含的内容。UpdateData(TRUE)用于从控件中同步内容到程序;UpdateData(FALSE)用于从程序中同步内容到控件。
②如果用上面讲的方法用到程序中,需要注意,如果日志记录数据记录频率大,时间长。代码中“str”会不断变大,最后变得不可控。比较好的处理方法是,限制str的大小(即控件显示日志的总条数),每次超过设置的阈值时,就将str写入txt日志文档中(比较好的做法是,txt文件按照时间节点进行命名,这样子能够保证一段时间区域中的日志信息不会过大,查找调试问题时也会很方便),而后将str清空。这样子就毫无瑕疵了。
原文:http://blog.csdn.net/lonelyrains/article/details/8696962
更多推荐
所有评论(0)