CFindReplaceDialog类封装了查找/替换对话框,使用CFindReplaceDialog类可以,可以轻松地在应用程序中实现标准的字符串查找/替换对话框 。不像其他通用对话框是模态对话框,查找/替换对话框是非模态对话框。CFindReplaceDialog对象有两种:查找对话框和查找/替换对话框。尽管对话框允许用户输入搜索和搜索/替换字符串,但它们不执行任何搜索或替换函数。 您必须将它们添加到应用程序中。

要构造一个CFindReplaceDialog对象,使用提供的构造函数(它没有参数)。 由于这是一个非模态对话框,所以使用new操作符在堆上分配对象,而不是在堆栈上。一旦CFindReplaceDialog对象被构造,你必须调用Create成员函数来创建和使用ShowWindow函数显示对话框。在调用Create之前可使用m_fr结构来初始化对话框。 m_fr结构的类型是FINDREPLACE。FINDREPLACE的原型如下:

typedef struct { DWORD        lStructSize; HWND         hwndOwner; HINSTANCE    hInstance; DWORD        Flags; LPTSTR        lpstrFindWhat; LPTSTR        lpstrReplaceWith; WORD         wFindWhatLen; WORD         wReplaceWithLen; LPARAM        lCustData; LPFRHOOKPROC lpfnHook; LPCTSTR       lpTemplateName;
} FINDREPLACE, *LPFINDREPLACE;

为了让父窗口得到查找/替换请求的通知,必须使用WindowsRegisterWindowMessage函数,并在你的框架窗口中使用处理此注册消息的ON_REGISTERED_MESSAGE消息映射宏。 你可以从框架窗口的回调函数中调用CFindReplaceDialog类成员表的“操作”部分中列出的任何成员函数。CFindReplaceDialog类的成员如下:

下面以一个实例来演示,CFindReplaceDialog的用法。

示例(基于演示文件对话框所创建的单文档工程):

1. 在IDR_MAINFRAME 菜单文件中新建“FindReplaceTestTest”菜单,及子菜单“Find”、“Find & Replace”,如下:

2. 在视图类中添加一个CFindReplaceDialog指针变量pDlg,如下:

3. 为Find子菜单添加事件处理程序,如下:

void CFileDialogTestView::OnFind()
{// TODO: 在此添加命令处理程序代码pDlg = new CFindReplaceDialog();pDlg->Create(TRUE,NULL, NULL, FR_DOWN,this);pDlg->ShowWindow(SW_SHOW);
}

4. 为Find & Replace子菜单添加事件处理程序,如下:

void CFileDialogTestView::OnFindReplace()
{// TODO: 在此添加命令处理程序代码pDlg = new CFindReplaceDialog();pDlg->Create(FALSE, NULL, NULL, FR_DOWN, this); //find & replacepDlg->ShowWindow(SW_SHOW);
}

5.在类视图头文件中注册一个Windows消息,代码如下:

// FileDialogTestView.h: CFileDialogTestView 类的接口
//#pragma oncestatic  UINT WM_FINDMESSAGE = RegisterWindowMessage(FINDMSGSTRING);//register windows message

6. 在类视图头文件中定义毁掉函数OnFindReplace(WPARAM wParm, LPARAM lParam),如下:

7. 在 类视图源文件(.app)中,添加消息映射宏,如下:ON_REGISTERED_MESSAGE(WM_FINDMESSAGE, OnFindReplace)

8.实现回调函数源代码,如下:

LRESULT CFileDialogTestView::OnFindReplace(WPARAM wParm, LPARAM lParam)
{CString findTxt, replaceTxt;int pos = -1;BOOL bReplace = pDlg->ReplaceCurrent();if (!bReplace){findTxt = pDlg->GetFindString();pos = mstr.Find(findTxt);if (-1 == pos){CString strTem;strTem.Format(L"\"%s\"not found", findTxt);MessageBox(strTem);}  else{CString strTem;strTem.Format(L"\"%s\" found at: %d", findTxt, pos);MessageBox(strTem);}}else{findTxt = pDlg->GetFindString();pos = mstr.Find(findTxt);replaceTxt = pDlg->GetReplaceString();MessageBox(replaceTxt);if (-1 != pos){mstr.Replace(findTxt, replaceTxt);CClientDC dc(this);CString oldString = mstr;COLORREF oldCr = dc.SetTextColor(mCurrentCr);CFont mfont;CFont* pOldfont;mfont.CreateFontIndirectW(&mLogfont);pOldfont = dc.SelectObject(&mfont);COLORREF clr = dc.SetTextColor(dc.GetBkColor());dc.TextOutW(startPoint.x, startPoint.y, oldString);dc.SetTextColor(clr);dc.TextOutW(startPoint.x, startPoint.y, mstr);dc.SelectObject(&pOldfont);dc.SetTextColor(oldCr);}elseMessageBox(L"None is replaced");}return 0;
}

9.按Ctrl+F5试运行,结果如下:

10,点击FileDialogTest 菜单下的子菜单Font,设置字体,如下:

11,点击FileDialogTest 菜单下的子菜单Single Line Text,完成一行文字输入,如下:

11,点击FindReplaceTest 菜单下的子菜单Find

打开Find对话框,输入EF,如下:

点击“查找下一个”,结果如下:

点击弹出信息框的确定后,输入:123,点击“查找下一个”,结果如下:

12. 关闭查找对话框后,点击“Find & Replace”子菜单,打开替换对话框

在查找内容输入框中输入:D,在替换为输入框中输入:12345

点击替换,结果如下:

需要注意的是,不要寄希望于“查找/替换对话框"替你完成查找于替换的代码,仅是提供一个对话框及发送FINDMSGSTRING注册消息而已。

MFC 通用对话框之“查找/替换“对话框相关推荐

  1. dw替换多个html标签,DW查找替换的技巧

    在开发建设网站的过程中,也许我们会遇到这样的情况,当我们的网站已经进行了相当部分,但是发现还需要对某些细节进行修改.这时候不可能完全的依靠手工去更改了,怎么办呢?利用Dreamwaver中查找替换也许 ...

  2. 强大的word查找替换功能

    http://blog.csdn.net/suixiaoxia/article/details/50568890 查找内容 可以快速搜索每一处指定单词或词组. 1. 单击"编辑"菜 ...

  3. 在Excel中查找/替换时使用换行符

    在Excel中的单元格内要将已有的字符替换为换行符,在其"查找/替换"对话框中不能直接输入,而且也不能简单地像Word中用^p或者^13.目前找到一个能够解决的办法是,使用VBS的 ...

  4. MFC实现打开、保存文件对话框和浏览文件夹对话框,把代码直接拷贝到要响应的按钮函数下面就行了

    MFC实现打开.保存文件对话框和浏览文件夹对话框,把代码直接拷贝到要响应的按钮函数下面就行了 一.打开.保存对话框 文件对话框属于通用对话框范畴(另外还有颜色,查找,查找替换,字体,打印等对话框). ...

  5. MFC—对话框程序—模式对话框与非模式对话框

    一.根据主窗口类型,MFC软件工程可以分为以下几种架构模型: 1.SDI(Single Document Interface):单文档界面,一个主框架窗口下只能编辑一份文档. 例如:记事本和画笔等. ...

  6. [MFC]模态对话框与非模态对话框

    MFC中有两种类型的对话框: 模态 对话框和非模态 对话框. 模态 对话框是指当其显示时,程序会暂停执行,直到关闭这个 模态 对话框后,才能继续执行程序中其他任务. (如我们常见的"打开文件 ...

  7. VS2010/MFC编程入门之十七(对话框:文件对话框)

    上一讲鸡啄米介绍的是消息对话框,本节讲解文件对话框.文件对话框也是很常用的一类对话框. 文件对话框的分类       文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中经常见 ...

  8. 文本编辑器中替换对话框的设计与实现

    文章目录 1 文本编辑器中替换对话框的设计与实现 1 文本编辑器中替换对话框的设计与实现 替换对话框需求分析: 可复用软件部分. 查找文本框中的指定字符串. 替换单个指定字符串. 替换所有指定字符串. ...

  9. MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)

    前面讲了模态对话框和非模态对话框,本节来将一种特殊的对话框--属性页对话框. 属性页对话框的分类 属性页对话框想必大家并不陌生,XP系统中桌面右键点属性,弹出的就是属性页对话框,它通过标签切换各个页面 ...

  10. MFC应用模态对话框和非模态对话框

    关于对话框呢 第一个了解的就是模态对话框和非模态对话框 定义的话: 1.模态对话框工作状态:当它获得焦点时,将垄断用户的输入,在完成本对话框之前,用户无法对本程序的其他部分进行操作. 2.非模态对话框 ...

最新文章

  1. iPhone为什么关机后仍可定位?“永远在线”处理器断电时也能启动Find My
  2. csdn和博客园对比
  3. 使用模拟的单元测试–测试技术5
  4. deebot扫地机器人使用_完美主义的双子座也选这款扫地机——小米米家扫地机器人使用心得...
  5. VS2008jQuery智能提示
  6. ubuntn开发php教程,Ubuntu16.04的PHP开发环境配置
  7. delphi设计模式 多语言开发
  8. java读取文件指定位置_java从文件指定位置开始读取文件流
  9. IE6给我网站开发带来的问题
  10. 如何高效学python编程_如何高效自学编程?天下没有难学的python
  11. 寻找linux最新版本,在各大Linux发行版中安装和使用inxi以查找Linux系统详细信息...
  12. sql server 查询当前月份日期列表数据
  13. 源码安装mysql初始化报错_源码安装MySQL5.6.39后,修改配置文件启动报错
  14. C++ stdio.h详解
  15. 图解 FAT 文件系统基础知识
  16. 利用Modem实现远程双机互联
  17. java : 实现微信网页授权,超详细!
  18. LTE - 以IMS SIP消息为例深入解析RLC AM PDU收发过程
  19. python远程聊天_python工具,微信聊天、自动回复、手机微信远程控制电脑
  20. 重磅!L4级自动驾驶硬件方案来啦!

热门文章

  1. 热敏电阻温度计算 公式 程序
  2. UR5 UR10 ------六自由度机械臂
  3. u盘写保护终极修复方法
  4. Windows XP虚拟机安装全过程(VMware)
  5. macOS Mac10.15修改登录界面背景
  6. 超像素学习笔记(1)——概念及判别条件
  7. 飞鱼crm接口,有没获取用户信息的接口和获取客户跟进信息的接口?是不是需要申请接口,等客服反馈。文档接口都看完了,没发现需要的接口信息!
  8. 计算机说课稿模板小学数学,精选小学数学万能说课稿模板
  9. ArGIS Engine专题(8)之利用GP监督分类最大似然法实现根据矢量样本和影像提取植被类型
  10. 图片复印如何去除黑底_手机拍的文字图片,打印出来都是灰底黑字,怎样才能变成白底黑字?...