TextBox :m_Message是CString变量,显示串口数据,数据越来越大怎么能使它自动清除呢??
 
另外怎么能使Textbox显示自动最后一行呢 而不是最上面一行??

解决方案 »

  1.   

    UpdateData();

    if (m_Message.GetLength() > 8192)
    {
    m_Message= m_Message.Right(4096);

    int pos = m_Message.Find(_T('\n')) + 1;

    m_Message= m_Message.Right(4096 - pos);
    }

    m_Message= m_Message + _T("\r\n");        CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT_MESSAGE);//IDC_EDIT_MESSAGE:Textbox控件ID
    int nLine = pEdit->GetLineCount();
    pEdit->LineScroll(nLine+1);        UpdateData(FALSE);
      

  2.   

    CEdit::ReplaceSel判断当m_Message的长度超过某个值时,去掉前面n(找换行符)句
      

  3.   

    给你贴出的代码就是超过一定的长度后清空前面的,并滚动到最后一行,在我的机器上是可以的.或许你的数据没有这么大,你设小一点应该就可以的.你可以调试或是用TRACE打印一下啊.
    if (m_Message.GetLength() > 1024)
        {
            m_Message= m_Message.Right(512);
            
            int pos = m_Message.Find(_T('\n')) + 1;//看看这里有没有找到.这里是找换行符
            
            m_Message= m_Message.Right(512 - pos);
        }
    这个调试一下就知道了的啊.
      

  4.   

    大的小的我都试过了,没出现效果。
    是不是还有属性设置要改,或代码不添加到EN_CHANGE函数内。
      

  5.   

    选了Multiline, Vertical,Aoto Vscroll,Border,Visble,Tab stop.
      

  6.   

    使用CEdit类的LineScroll()函数;
    假如你定义了CEdit一个控件变量m_edit;
    使用m_edit.LineScroll(m_edit.GetLineCount(),0);
    就可以了!
      

  7.   

    问题描述不清啊,或是把你的代码贴出来。Textbox?VC里应该是叫Edit控件吧?不行啊,不能是CString
    ---------------------------
    这又是什么意思的?难道m_Message不是CString类型吗?
    PS:表达也是一门艺术。
      

  8.   

    抱歉,再次表达,
    1、我想让EditBox显示最新的数据(QQ聊天记录模式),也就是能显示最后一行,但现在只能显示最初的几行,即使拉到最下面,它会立即跳回显示前几行。
    2、将最初进来的数据清除或部分清除,只保留部分最新数据。
    完毕。
      

  9.   

    我放到编辑框的EN CHANG函数里了没有错吧,
      

  10.   

    没什么奇怪的。
    1,你的串口数据中可能根本就没有换行符,你自己适当修改一下代码就可以啊。
    2,不应该在EN CHANG中调,也没有必要响应这个函数,因为你是接受串口数据,然后显示。你只需要自定义一个显示串口数据到EDIT控件的函数,当接受到数据,就调用这个函数控制显示。
    void CPrepareDlg::Prompt(const CString & strPrompt)
    {
    CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT1);

    pEdit->GetWindowText(m_Message);

    if (m_Message.GetLength() > 1024)
    {
    m_Message = m_Message.Right(512);

    int pos = m_Message.Find(_T('\n')) + 1;

    m_Message = m_Message.Right(512 - pos);
    }

    m_Message = m_Message + _T("\r\n") + strPrompt;
    SetDlgItemText(IDC_EDIT1, m_Message);
    int nLine = pEdit->GetLineCount();
    pEdit->LineScroll(nLine+1);
    }CString str = 接受到的串口数据;
    Prompt(str);