(MFC)查找和替换对话框实例

来源:互联网 发布:netstat 查看端口 编辑:程序博客网 时间:2024/05/21 20:26

介绍

MFC中有许多的通用对话框例入选择文件、选择图标等,这极大地降低了我们开发的难度。想必大家也想试试如何使用一个通用对话框了吧,今天将带你在MFC中使用“查找和替换”对话框。

步骤

1.首先需要创建一个基于对话框的MFC应用程序,这里不再赘述2.创建一个对话框资源,向该对话框中添加“Edit Control”(文本编辑框控件)和一个“Button”按钮控件3.选中添加的文本编辑框控件,并单击右键选择“添加变量”,将输入变量名“m_text”然后确定4.打开对话框的头文件,添加如下代码。(对话框的标准构造函数下)
CFindReplaceDialog *dlg; //申明查找替换对话框int nindex;//存储查找的字符串的起始位置int rindex;//替换字符串大小BOOL degree;//判断是否为第一次替换BOOL find;//判断是否进行查找的变量


5.定义新的消息WM_FINDMESSAGE

static const UINT MsgFindReplace = ::RegisterWindowMessage(FINDMSGSTRING); //用于捕获有"查找和替换"发出的消息
6.打开头文件的消息映射定义部分,添加如下代码
afx_msg LONG OnFindReplace(WPARAM wParam, LPARAM lParam);//添加映射宏


7.找到对话框的源文件("cpp"文件)在消息映射部分添加如下代码:

ON_REGISTERED_MESSAGE(MsgFindReplace, OnFindReplace)//将"查找和替换"发出的消息映射为函数OnFindReplace()


8.打开对话框的源文件,添加如下消息处理代码

LRESULT CMFCApp1Dlg::OnFindReplace(WPARAM, LPARAM lParam){CString strText, repText;//声明字符串变量strText = dlg->GetFindString();//获得查找字符串CString str;//声明字符串变量m_text.GetWindowText(str);//获得编辑框中是文本if (dlg->ReplaceCurrent())//判断是否进行替换find = FALSE;//进行替换elsefind = TRUE;//进行查找int len;//声明整型变量if (dlg->ReplaceAll())//判断是否全部替换{repText = dlg->GetReplaceString();//获得替换字符串len = repText.GetLength();//获得替换字符串长度str.Replace(strText, repText);//使用替换字符串替换查找字符串m_text.SetWindowText(str);//将替换后的字符串显示在编辑框中}if (find)//判断是查找还是替换{len = strText.GetLength();//获得要查找字符串的长度}else{CString left, right;//声明字符串变量int num = strText.GetLength();//获得查找字符串的长度int strnum = str.GetLength();//获得编辑框中文本长度int index;//声明整型变量int ret = str.Find(strText, 0);if (ret < 0)return 1;if (!degree)//判断是否为第一次替换index = str.Find(strText, nindex);//获得查找字符串在编辑框文本中的位置else if (nindex - rindex >= 0)//判断起始查找位置是否小于0index = str.Find(strText, nindex - rindex);//获得查找字符串在编辑框文本中的位置else{nindex = rindex;//设置起始查找位置return 1;}degree = TRUE;left = str.Left(index);//获得替换字符串左侧的字符串right = str.Right(strnum - index - num);//获得替换字符串右侧的字符串repText = dlg->GetReplaceString();//获得替换字符串len = repText.GetLength();//获得替换字符串长度rindex = len;str = left + repText + right;//组合成新的字符串m_text.SetWindowText(str);//在编辑框中显示新的字符串}int index = str.Find(strText, nindex);//获得查找字符串在编辑框文本中的位置m_text.SetSel(index, index + len);//选中查找或替换的字符串nindex = index + len;//设置起始查找位置m_text.SetFocus();//编辑框获得焦点return 0;}


9.双击按钮控件(即添加默认的按钮点击事件以处理WM_FINDMESSAGE消息)添加如下代码:

dlg = new CFindReplaceDialog; //创建新的对话框dlg->Create(FALSE, NULL); //显示"查找和替换"对话框(如果只显示查找的话,把FALSE改成TRUE即可)dlg->ShowWindow(SW_SHOW);//显示窗体


注意: 如果只需要“查找”对话框只要将“dlg->Create(FALSE,NULL)”改为” dlg->Create(TRUE,NULL)”即可

启动!

原理

该过程中使用了消息映射的功能,因为“查找和替换”对话框是非模态的,所以当按钮创建“查找的替换”时候将会映射到处理函数“OnFindReplace”,从而实现查找和替换功能。原理图如下:

源代码

360云盘分享:https://yunpan.cn/criDVZLp9Bqzz 密码为:e9e1由Visual Studio 2015编译

存在的问题

由于目前无法释放指针可能会导致内存泄漏的问题,如果有更好的意见或建议欢迎与我分享,谢谢 :)

参考

1.《Visual C++从入门到精通》,第六章,7.4节2.VC使用查找和替换对话框 
0 0
原创粉丝点击