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)