我要实现像聊天室那样的多行文本滚动显示功能,用的控件是CRichEditCtrl,CEdit也可。
关键是要在聊天语句多了以后,将最旧的一行语句删除并添加最新的一行语句,如此循环。
请尽快回复,我即将结贴。

解决方案 »

  1.   

    http://www.codeguru.com/Cpp/controls/richedit/article.php/c2395/
      

  2.   

    有许多途径。就用聊天记录为例吧:
    首先是你聊天记录数据结构的选择,我们可以用一个结构来表示发信息用户,标题,时间....
    再根据聊天记录的时间生成一个结构数组或链表。这里为了简便,就用一个字符串来表示一条记录,显然聊天记录成了一个字符串数组或链表了。可以用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
      

  3.   

    谢谢!我自己用setsel+replacesel也做出来了,实现方法更加简单。