大体相关的有一个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;
}