MFC应用实例:[65]查找与替换对话框
1、新建一个基于对话框的应用程序,工程名为FindDlgDemo。
![MFC应用实例:[65]查找与替换对话框](https://exp-picture.cdn.bcebos.com/51f9aa3ea8db574a88469e28a7f7dfb2dd1917c8.jpg)
2、界面设计如下,添加两个按钮,一个编辑框,一个文本控件。
![MFC应用实例:[65]查找与替换对话框](https://exp-picture.cdn.bcebos.com/92dd32f7dfb2dc19b95856af95def4dca13910c8.jpg)
3、对“查找”按钮添加响应函数OnFind() ,响应函数OnFind() 代码如下:
void CFindDlgDemoDlg::OnFind()
{
UpdateData(true);
pos=0;
if(pFindReplaceDlg)//判断是否已存在一个对话框
{
pFindReplaceDlg->SetActiveWindow();//若替换对话框已打开,则使之成为活动窗口
return;
}
//创建查找替换对话框
pFindReplaceDlg=new CFindReplaceDialog;
pFindReplaceDlg->Create(FALSE,NULL,NULL,FR_DOWN,this);
}
![MFC应用实例:[65]查找与替换对话框](https://exp-picture.cdn.bcebos.com/5a5a00def4dca0396f6bc35858d96975f3c40dc8.jpg)
4、为查找替换对话框添加响应函数OnFindReplace()如下:
LRESULT CFindDlgDemoDlg::OnFindReplace(WPARAM, LPARAM lParam)
{
//判断对话框是否被关闭
if(pFindReplaceDlg->IsTerminating())
pFindReplaceDlg=NULL;
//获取当前查找/替换对话框的指针
CFindReplaceDialog* pDlg = CFindReplaceDialog::GetNotifier(lParam);
CString m_FindString = pDlg->GetFindString(); //要查找的字符串
int strlen=m_FindString.GetLength();//获取查找文本的长度
CString m_ReplaceString = pDlg->GetReplaceString(); //要替换的字符串
int placelen=m_ReplaceString.GetLength();//获取替换文本的长度
CString strpos;
if( pDlg->FindNext() ) //按下了"查找"按钮,查找下一个
{
pos=m_str.Find(m_FindString,pos);
if(pos==-1)//未找到查找的字符
{
AfxMessageBox("搜索完毕,没有找到指定字符串");
pos=0;
}
else
{
m_ctlEdit.SetFocus();
m_ctlEdit.SetSel(pos,pos+strlen);
curpos=pos;
pos++;
}
}
if(pDlg->ReplaceCurrent()) //按下了"替换"按钮,
{
if(curpos>=0)
{
m_ctlEdit.SetFocus();
m_ctlEdit.SetSel(curpos,curpos+strlen);
m_ctlEdit.ReplaceSel(m_ReplaceString);
UpdateData(true);
m_ctlEdit.SetSel(curpos,curpos+placelen);
pos=curpos+placelen;
}
}
if( pDlg->ReplaceAll() ) //按下了"全部替换"按钮
{
m_str.Replace(m_FindString,m_ReplaceString);//替换字符串
UpdateData(false);
}
return 0;
}
![MFC应用实例:[65]查找与替换对话框](https://exp-picture.cdn.bcebos.com/125ed0ecd3d9697572b0e12dd243040149fe09c8.jpg)
5、程序运行如下:
![MFC应用实例:[65]查找与替换对话框](https://exp-picture.cdn.bcebos.com/054056fe1e425d6b83a5449d11883913e9e500c8.jpg)