在Windows通用对话框中,查找/替换对话框是比较特殊的一个,它是一个非模态对话框,所以它的使用与其它通用对话框有所不同。
一、注册
注册的目的有两个,一是说明在程序中要使用查找/替换对话框,二是让窗口能响应查找/替换消息,提供相应的消息函数。
注册位置应该在查找/替换对话框的父窗口,比如主框架窗口CMainFrame、视图CxxView或某对话框。也就是响应查找/替换操作的那个窗口。
比如,欲在视图中响应查找/替换操作,则在视图中加入下面的注册代码(红字为添加的代码):
classCEditTestView:publicCFormView { ………… protected: //{{AFX_MSG(CEditTestView) ………… afx_msgLONGOnFindReplace(WPARAMwParam,LPARAMlParam); DECLARE_MESSAGE_MAP() };
IMPLEMENT_DYNCREATE(CEditTestView,CFormView) staticUINTWM_FINDREPLACE=::RegisterWindowMessage(FINDMSGSTRING); BEGIN_MESSAGE_MAP(CEditTestView,CFormView) //{{AFX_MSG_MAP(CEditTestView) ………… //}}AFX_MSG_MAP ON_REGISTERED_MESSAGE(WM_FINDREPLACE,OnFindReplace) END_MESSAGE_MAP() |
注册完成后,OnFindReplace()函数可用来接收查找/替换对话框的用户消息,另外用ClassWizard打开CEditTestView,可以发现ID_EDIT_FIND和ID_EDIT_REPLACE两个ID号,可以用来添加查找/替换菜单,这在注册前是没有的。
二、对话框的创建与显示
作为非模态对话框,必须用new操作符分配存储空间,再用Create()函数进行初始化,最后用ShowWindow()函数显示对话框。
下面的例子是创建一个查找对话框:先在菜单中用ID号ID_EDIT_FIND添加一个“查找”菜单项,再用ClassWizard添加它的响应函数OnEditFind(),加入代码。
//查找菜单响应函数 voidCEditTestView::OnEditFind() { CFindReplaceDialog*pDlg=newCFindReplaceDialog(); pDlg->Create(true,NULL,NULL,FR_DOWN,this);//创建查找对话框 pDlg->ShowWindow(SW_SHOW);//显示对话框 } |
Create()函数的原型如下:
BOOL Create(BOOL bFindDialogOnly,LPCTSTR lpszFindWhat,LPCTSTR lpszReplaceWhat=NULL,DWORD dwFlag=FR_DOWN,CWnd* pParentWnd=NULL);
参数: bFindDialogOnly为对话框类型,为TRUE时,显示查找对话框,为FALSE时,显示查找/替换对话框; lpszFindWhat为在查找框中显示的字符串; lpszReplaceWhat为在替换框中显示的字符串; dwFlag为标志位,用来定制对话框,它可以是一个或多个标志的组合,主要取值如下: FR_DOWN如果设置,对话框中的“向下查找”单选按钮被选中,如果没有设置,“向上查找”单选按钮被选中; FR_HIDEUPDOWN不显示查找方向单选按钮; FR_HIDEMATCHCASE不显示区分大小写复选按钮; FR_HIDEWHOLEWORD不显示全字匹配复选按钮; FR_MATCHCASE使区分大小写复选按钮处于选中状态; FR_WHOLEWORD使全字匹配复选按钮处于选中状态; FR_NOMATCHCASE使区分大小写复选按钮处于禁止(变灰)状态; FR_NOUPDOWN使查找方向单选按钮处于禁止(变灰)状态; FR_NOWHOLEWORD使全字匹配复选按钮处于禁止(变灰)状态; FR_SHOWHELP在对话框中显示一个帮助按钮。 pParentWnd指向对话框的父窗口,如果为NULL,则为主框架窗口,使用时需让它指向接收查找/替换消息的窗口。
上例中定制的是一个查找窗口,它显示为:
如果定制一个查找/替换窗口,可以添加OnEditReplace()函数:
//替换菜单响应函数 voidCEditTestView::OnEditReplace() { CFindReplaceDialog*pDlg=newCFindReplaceDialog(); pDlg->Create(false,m_FindString,m_ReplaceString,FR_DOWN,this);//创建替换对话框 pDlg->ShowWindow(SW_SHOW);//显示对话框 } |
m_FindString和m_ReplaceString是预定义的字符串变量,用于初始化查找框和替换框。这时它显示为:
在Create()创建对话框前,也可以用成员变量m_fr对对话框进行更详细的定制。
三、响应查找/替换消息
查找/替换对话框显示后,其后单击其上任何一个按钮,消息都被送到窗口回调函数OnFindReplace()函数中,所以我们不需要为每个按钮添加消息函数,所有对按钮消息的处理都在OnFindReplace()函数中进行即可。
这里要注意一点,查找/替换对话框本身没有查找/替换功能,它只是为我们提供了一个接收用户要求的接口,使我们知道用户提出了何种查找/替换要求,真正的查找/替换工作需另行编程实现。这一点与文件对话框相似,用打开文件对话框不能真的打开文件,它只是让我们知道用户想要打开哪个文件而已。
在OnFindReplace()函数中,我们可以用CFindReplaceDialog类的成员函数获知用户请求,其中主要的有:
static CFindReplaceDialog* PASCAL GetNotifier(LPARAM lParam); 获取当前查找/替换对话框的指针。参数lParam为传递给回调函数OnFindReplace()的lParam值。
BOOL FindNext()const; 检取用户是否单击“查找下一个”按钮。
BOOL ReplaceCurrent()const; 检取用户是否单击“替换”按钮。
BOOL ReplaceAll()const; 检取用户是否单击“全部替换”按钮。
利用以上几个函数可以获知用户单击了哪个按钮。但在查找/替换时,还需要知道用户的查找/替换设置,这可以用下面的函数检取这些设置:
CString GetFindString()const; 检取查找的字符串。它可能与设置的初始值不同。
CString GetReplaceString()const; 检取替换的字符串。
BOOL SearchDown()const; 检取查找方向,为TRUE时表示“向下查找”。
BOOL MatchCase()const; 检取“区分大小写”状态,为TRUE时表示要求区分大小写。
BOOL MatchWholeWord()const; 检取“全字匹配”状态,为TRUE时表示要求全字匹配。
以下就是注册的OnFindReplace()函数,其中“……”为需要用户编写的查找/替换操作。
LONGCEditTestView::OnFindReplace(WPARAMwParam,LPARAMlParam) { CFindReplaceDialog*pDlg=CFindReplaceDialog::GetNotifier(lParam); m_FindString=pDlg->GetFindString();//查找串 m_ReplaceString=pDlg->GetReplaceString();//替换串 if(pDlg->FindNext())//查找下一个 { …………; } if(pDlg->ReplaceCurrent())//替换 { …………; } if(pDlg->ReplaceAll())//全部替换 { …………; }
return0; } |
示例程序是一个简易文本编辑器,模仿记事本的查找/替换形式设计了相应的查找/替换形式。
本示例程序与文章《扩展Edit Box控件的功能》的相同。
示例程序界面图:
|
相关推荐
4.如何使用查找与替换对话框?(Visual C++编程 源代码)4.如何使用查找与替换对话框?(Visual C++编程 源代码)4.如何使用查找与替换对话框?(Visual C++编程 源代码)4.如何使用查找与替换对话框?(Visual C++...
查找与替换对话框 查找与替换对话框 查找与替换对话框 查找与替换对话框
替换对话框,继承自查找对话框后实现,ReplaceDialog.
通过VC实现使用查找替换对话框实现查找替换功能,供初学者参考。
Visual C++ 开发技术 通用对话框编程 查找替换对话框例程,例程来自《Visual C++ 开发技术大全》,全部打包下载可点击http://download.csdn.net/detail/zhou625315237/5103878
QQ:710906900 E-mail:sdweb1@126.com<br><br>软件主要功能及版本更新信息: V1.0(Bate) 1、批量查找字符 2、有选择性的批量替换字符 3、将查找/替换结果导出到TXT文件 <br>V1.1 1、自动...
基于对话框的MFC应用程序FindReplaceDialogTest,Windows通用对话框中,查找/替换对话框,本身没有查找/替换功能,它只是为我们提供了一个接收用户要求的接口,使我们知道了何种查找/替换的要求,真正的查找/替换...
正则表达式是一个很强的工具,可以在你的软件中增强查找、替换、匹配等功能。附件中封装了Henry Spencer的regex library源码,有说明和范例,纯C可移值,简单易用。
CFindReplaceDialog类:封装了标准查找/替换对话框 CFont类:封装了Windows图形设备接口(GDI)中的字体对象 CFontDialog类:封装了字体选择对话框 CGdiObject类:GDI绘图工具的基类 CIPAddressCtrl类:提供了IP地址...
无需打开查找/替换对话框。 查找下一个匹配项的默认键是 Ctrl-F3 (find-selection:find-next),查找上一个匹配项的默认键是 Ctrl-Shift-F3 (find-selection:find-previous)。 对于区分大小写的搜索,查找下一个...
如何调用系統的【查找】、【替换】的对话框?
Delphi7中Memo组件实现查找替换功能
VS2010查找和替换对话框总是变得很大,此补丁主要用于:当手动调整查找对话框大小后,下次打开查找对话框时,就是上次调整的大小。
如何使用Windows系统的查找与替换对话框,这个例子会告诉你答案,例子调用了“查找”对话框,并没有调用替换的对话框,不过功能思路是一样的,相信学会了这个,调用其它的也就容易理解了。 运行环境:Visual Studio...
Delphi TFindDialog TReplaceDialog对话框的使用 使用 查找对话框实现在MEMO中进行字符串查找 使用 替换对话框实现在MEMO中进行字符串替换 请下载看就知道了 这种资源极少
CFindReplaceDialog类:封装了标准查找/替换对话框 CFont类:封装了Windows图形设备接口(GDI)中的字体对象 CFontDialog类:封装了字体选择对话框 CGdiObject类:GDI绘图工具的基类 CIPAddressCtrl类:提供了IP...
替换 Windows 公共对话框的 DLL 和演示程序的源代码,具有HOOK 功能(86KB)
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。本文重点给大家介绍swift 3.0 正则表达式查找/替换字符的实现代码,需要的朋友参考下吧
Transnomino for Mac是Mac上的文件批量重命名工具,可以同时处理多个文件,并...使用通配符(*)支持简单查找/替换 使用正则表达式查找/替换。可以在对话框系统的帮助下创建正则表达式。 案例更改,如大写/小写和大写
- 当前文档 原有 查找/替换 已支持 - 当前选中 原有 查找/替换 已支持 - 所有打开的文档 原有 查找/替换 不支持 - 当前项目 原有 查找/替换 不支持 - 所有打开的项目 原有 查找/替换 不支持 - 整个工作空间 ...