我要实现像聊天室那样的多行文本滚动显示功能,用的控件是CRichEditCtrl,CEdit也可。
关键是要在聊天语句多了以后,将最旧的一行语句删除并添加最新的一行语句,如此循环。
请尽快回复,我即将结贴。
关键是要在聊天语句多了以后,将最旧的一行语句删除并添加最新的一行语句,如此循环。
请尽快回复,我即将结贴。
解决方案 »
- 修改CArray
- 熟悉detours的好心人帮帮我
- 通过vc编程修改注册表能否在开机的时候启动隐藏的一个控制台应用程序~~~
- isapi filter中如何限制同一IP连接数和下载速度
- SOCKET通讯问题
- 菜鸟提问:关于视图遍历。或许我的问题很可笑,但我是个初学者,还是请各位大侠多多包涵。
- 求在标准C下分行读写文本文件内容的例子
- 新手问题(对话框中,如何显示GIF文件?)望详细告知!
- vc中的汇编使用。急,在线等待....
- 如何在界面上加"正在测量中....."
- 如何将CDBVariant类型中的时间类型转换成SQLSERVER中的DATATIME类型?
- 急急 在线结贴 扩展Dll中不能取得应用程序的指针,AfxGetApp()返回为NULL 老总急着要货,帮帮忙
首先是你聊天记录数据结构的选择,我们可以用一个结构来表示发信息用户,标题,时间....
再根据聊天记录的时间生成一个结构数组或链表。这里为了简便,就用一个字符串来表示一条记录,显然聊天记录成了一个字符串数组或链表了。可以用char *sQQ[MAX_NUMBER];或CStringArray sQQ; 或CStringList sQQ;等。我们可以用CStringArray sQQ;
第二是实现信息的滚动。最简单的莫过于用CEdit,在选择属性时,选择MultiLine.对应这个CEdit编辑框生成一个CString sDisplayQQ;只要每次出现一个聊天信息就构造一次sDisplayQQ,并UpdateData()刷新CEdit;不就实现滚动了吗。
第三是聊天语句多了以后,将最旧的一行语句删除并添加最新的一行语句。我们可以定一个最大显示的聊天记录数,#define MAX_NUMBER 50 ,现在每收到一个聊天记录时,我们判断是否大于这个数。假如 CString m_sTalk;是刚接收到的一个聊天记录:
if (sQQ.GetSize() < MAX_NUMBER) //如果聊天记录数未到峰值
{
sQQ.Add(m_sTalk);
}
else //如果达到峰值
{
sQQ.RemoveAt(0); //删除第一条记录
sQQ.Add(m_sTalk);
}//构造sDisplayQQ,其实只要将sQQ中的所有字符连接起来就可以了
sDisplayQQ.Empty(); //清空显示字符串
for (int i = 0; i < sQQ.GetSize(); i++)
{
sDisplayQQ += sQQ.GetAt(i);
sDisplayQQ += "\r\n"; //换行
}UpdateData(); //刷新CEdit