琢磨这个问题比较久了。之前一直搜索“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

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐