MFC RichEdit控件显示多次操作问题

大体相关的有一个Button和一个RichEdit编辑控件

运行流程为,按钮响应函数开启线程,线程中读取对应目录txt文件,存到字符串中,然后加上/r/n使其能换行,然后通过SendMessage发送给响应函数,在响应函数中,通过SetSel和颜色设置对我想要的部分进行颜色更改

现在问题是,第一次按下按钮功能正常实现,但再摁第二次就会全体变红,调试过程查看定义的几个变量没有问题,比较蒙。


UINT _cdecl Find3Proc(LPVOID pParam)//线程函数
{

    CFindItem* pItem4 = (CFindItem*)pParam;

    CString CTarget = pItem4->m_TargetPath;
    CString CName = pItem4->m_Name;

    string Target = (CStringA)CTarget;
    string Name = (CStringA)CName;

    char buff[MAX_PATH];
    CString strbuff;

    ifstream infile(Target.append("\\").append(Name).append(".txt"));

    if (infile.good())
    {
        while (!infile.eof())
        {
            infile.getline(buff, 1000);
            //strbuff += buff;
            strbuff = buff;
            strbuff += "\r\n";
            SendMessage(pItem4->m_hMainDlg, WM_ADD_ITEM4, 0, (LPARAM)(LPCTSTR)strbuff);
        }
    }

    delete pItem4;

    return 0;
}

void CFileFinderDlg::OnBnClickedFileopenBtn()
{
    // TODO: 在此添加控件通知处理程序代码
    m_richedit.SetSel(0, -1);
    m_richedit.Clear();

    CFindItem* pItem4 = new CFindItem();

    GetDlgItemText(IDC_TARGET_EDIT, pItem4->m_TargetPath);
    GetDlgItemText(IDC_NAME_EDIT, pItem4->m_Name);
    pItem4->m_hMainDlg = GetSafeHwnd();//给pItem对象中的m_hMainDlg赋值

    AfxBeginThread(Find3Proc, pItem4);//启动线程
}


LRESULT CFileFinderDlg::OnAddItem4(WPARAM wParam, LPARAM lParam)
{
    CString strPath = (LPCTSTR)lParam;

    m_richedit.ReplaceSel(strPath);

    int lineStart = 0;
    int lineEnd = 0; 
    int nLineCount = 0;

    nLineCount = m_richedit.GetLineCount();

    CHARFORMAT2 cf;
    ZeroMemory(&cf, sizeof(cf));
    cf.cbSize = sizeof(CHARFORMAT2);
    cf.dwMask = CFM_COLOR /*| CFM_FACE | CFM_SIZE*//* | CFM_BACKCOLOR*/ | CFM_BOLD;      //
    cf.crTextColor = RGB(255, 0, 0);        //文字颜色
    cf.dwEffects = CFE_BOLD;
    
    lineStart = m_richedit.LineIndex((nLineCount - 2));//取第一行的第一个字符的索引
    lineEnd = m_richedit.LineIndex((nLineCount - 2)) + 2;//取第一行的最后一个字符的索引——用第二行的第一个索引减1来实现
    m_richedit.SetSel(lineStart, lineEnd); // 选中区域文字       
    m_richedit.SetSelectionCharFormat(cf);
    m_richedit.SetSel(-1, -1);//取消选中

    m_richedit.PostMessage(WM_VSCROLL, SB_BOTTOM, 0);

    return TRUE;
}

img

img