(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
6.打开头文件的消息映射定义部分,添加如下代码static const UINT MsgFindReplace = ::RegisterWindowMessage(FINDMSGSTRING); //用于捕获有"查找和替换"发出的消息
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
- (MFC)查找和替换对话框实例
- 用MFC实现“查找/替换”对话框
- 0003-MFC--文本的查找和替换
- 应用查找替换对话框
- 查找/替换对话框CFindReplaceDialog
- VC++查找替换对话框
- Find and Replace Dialog Boxes 查找和替换对话框
- 通用对话框专题之查找替换对话框
- MFC非模态对话框实例
- MFC非模态对话框实例
- 查找(替换)对话框在VC中的使用
- MFC文件查找与替换
- 《Windows核心编程》の“查找”和“替换”对话框+“页面设置”对话框
- VS2010中正则表达式查找和替换实例
- VS/MFC实例:对话框---创建对话框模板和修改对话框属性
- MFC的ADO实例(基于VC2012对话框实例)
- VC++中查找/替换对话框的使用
- 查找/替换对话框CFindReplaceDialog的使用
- MongoDB Plugin 1.0.4
- Java hashCode() 方法深入理解
- 找出一个数组中重复次数最多的数
- 设计模式(三) 抽象工厂模式
- 自定义下载圆形按钮
- (MFC)查找和替换对话框实例
- Android 网络框架的编写和使用
- Javascript异常捕获
- 每天一个linux命令(50):crontab命令
- VC2005开发MFC ActiveX控件基础教程
- android 修改framework下资源文件后如何编译
- (C++)构造函数初始化
- 农业垂直搜索引擎三》爬虫机器人模块的设计与实现
- iOS中类方法和实例方法