0
点赞
收藏
分享

微信扫一扫

MFC 实现CEdit控件文本查找功能

重载CFindReplaceDialog类

class CFindReplaceDlg : public CFindReplaceDialog
{
public:
CFindReplaceDlg(CEdit& edit);
private:
CEdit& m_edit;
void OnOK();
}

void CFindReplaceDlg::OnOK()
{
CFindReplaceDialog::OnOK();
CString str = this->GetFindString();
CApp::_FindText(m_edit, GetFindString(), MatchCase(), SearchDown());
}



void CApp::_FindText(CEdit& edit, CString str, BOOL bCase, BOOL bDown)
{//bCase是否区分大小写 bDown往上查找和往下查找
CString sText;
edit.GetWindowText(sText);
if (!bCase)
{//不区分大小写则复制一个副本并将样本和副本都转换成小写
str.MakeLower();
sText.MakeLower();
}

int nStart = 0, nEnd = 0;
edit.GetSel(nStart, nEnd);//获取当前光标的位置
if (!bDown)
{//向上查找
str.MakeReverse();
sText.MakeReverse();//将副本和目标都倒序
nEnd = sText.GetLength() - nStart;
int n = sText.Find(str, nEnd);
if (n < 0)
{
AfxMessageBox(_T("找不到 “") + str + _T("”"));
return;
}
nEnd = sText.GetLength() - n;
edit.SetSel(nEnd - str.GetLength(), nEnd);//厉害
}
else
{
int n = sText.Find(str, nEnd);//文本和开始位置,失败返回-1
if (n < 0)
{
AfxMessageBox(_T("找不到 “") + str + _T("”"));
return;
}
edit.SetSel(n, n + str.GetLength());
}

}


举报

相关推荐

0 条评论