您的位置:首页 > 编程语言 > C语言/C++

使用MFC中自带的CFindReplaceDialog类实现字符串查找和替换

2014-11-30 10:25 471 查看
  首先,我们给出本次的demo



 CFindReplaceDialog类提供了查找和查找/替换对话框,在windows通用的对话框中,查找对话框是比较特殊的一个,他是一个非模态对话框,所以他的使用与其他通用对话框有所不同。本例使用查找对话框对编辑框中的文件实现查找和替换。

首先   ,我们为编辑框添加成员变量

CString m_str;
CEdit m_ctlEdit;

然后在头文件中声明查找对话框并在初始化函数OnInitDialog中进行初始化

CFindReplaceDialog *pFindReplaceDlg;
int pos;
int curpos;

下面是在ONinitDialog中初始化的内容

pFindReplaceDlg = NULL;
curpos = -1;

然后为查找按钮添加响应函数,在create函数创建查找替换对话框

void CMFCApplication5Dlg::OnBnClickedButton1()

{
// TODO:  在此添加控件通知处理程序代码

UpdateData(TRUE);

pos = 0;

if (pFindReplaceDlg){
pFindReplaceDlg->SetActiveWindow();
return;
}

pFindReplaceDlg = new CFindReplaceDialog;
pFindReplaceDlg->Create(FALSE, NULL, NULL, FR_DOWN, this);

}

然后要做的就是 发送并处理替换对话框的通知消息

由于替换对话框是非模态对话框,所有用户选择完毕后,要通知父窗口,这就要通过自定义的消息实现这个功能。首先在对话框的稳步通过函数定义消息

代码如下

static const UINT MsgFindReplace = ::RegisterWindowMessage(FINDMSGSTRING);

然后为消息添加响应函数

BEGIN_MESSAGE_MAP(CMFCApplication5Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplication5Dlg::OnBnClickedButton1)
ON_REGISTERED_MESSAGE(MsgFindReplace , OnFindReplace)

END_MESSAGE_MAP()

    

在消息梳理函数中,实现具体的查找,替换操作

LRESULT CMFCApplication5Dlg::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(_T("搜索完毕,没有找到指定的字符串"));
pos = 0;
}
else
{
m_ctlEdit.SetFocus();
m_ctlEdit.SetSel(curpos, curpos + strlen);
UpdateData(TRUE);
m_ctlEdit.SetSel(curpos, curpos + placelen);
pos = curpos + placelen;

}

}

if (pDlg->ReplaceCurrent()){ //按下了替换按钮
if (pos == 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;

}

以上代码就实现了字符串的查找以及字符串的查找和替换功能

代码很简单,但是还是需要一步步的积累。

一步一个脚印,希望自己在c++上走的更远
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MFC c++
相关文章推荐