我在使用richedit2.0时,用如下的代码,出现情形是,第一行显示比较正常,那个"Pass"会变成蓝色.
但第二行却不会被改变颜色,究竟是哪里出了问题了?
void TestDlg::OnButton1()
{
   AddText("micro sd test    Pass");
   AddText("micro sd test    Pass");
}
void TestDlg::AddText(char buf[])
{
    CString str;
    str = buf;
    str +="\r\n";
    m_richedit.SetSel(-1, -1);
    m_richedit.ReplaceSel(str);    CHARFORMAT cf;
    ZeroMemory(&cf, sizeof(CHARFORMAT));
    cf.cbSize = sizeof(CHARFORMAT);
    cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |
                         CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
    cf.dwEffects = 0;
    cf.yHeight = 18*18;//文字高度
    cf.crTextColor = RGB(0, 0, 255); //文字颜色
    strcpy(cf.szFaceName ,_T("Arial"));//设置字体
    int iCount = strlen(buf);
    m_richedit.SetSel(iCount-6, iCount); //设置处理区域
    m_richedit.SetSelectionCharFormat(cf);    //自动滚动至最后一行
    m_richedit.SendMessage(WM_VSCROLL, SB_BOTTOM, 0);
}

解决方案 »

  1.   

    m_richedit.SetSel(iCount-6, iCount); //设置处理区域
    这行代码老是在一处(第一行)处理了,所以永远是第一行有影响,改为:
    void TestDlg::AddText(char buf[])
    {
    CString str;
        str = buf;
        str +="\r\n";
    int nLength = m_richedit.GetTextLength();
        m_richedit.SetSel(-1, -1);
        m_richedit.ReplaceSel(str);    CHARFORMAT cf;
        ZeroMemory(&cf, sizeof(CHARFORMAT));
        cf.cbSize = sizeof(CHARFORMAT);
        cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |
                             CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
        cf.dwEffects = 0;
        cf.yHeight = 18*18;//文字高度
        cf.crTextColor = RGB(0, 0, 255); //文字颜色
        strcpy(cf.szFaceName ,_T("Arial"));//设置字体
        int iCount = strlen(buf);    m_richedit.SetSel(iCount-6+nLength, iCount+nLength); //设置处理区域
        m_richedit.SetSelectionCharFormat(cf);    //自动滚动至最后一行
        m_richedit.SendMessage(WM_VSCROLL, SB_BOTTOM, 0);}
      

  2.   

    多谢.seu07201213(【迷茫中.....】〖鱼肉香丝〗≈^︵^≈) 
    给分给你.不过在另外一个贴子中还有一个问题呢.