`
huozheleisi
  • 浏览: 1291369 次
文章分类
社区版块
存档分类
最新评论

查找/替换对话框CFindReplaceDialog的使用

 
阅读更多

在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控件的功能》的相同。

示例程序界面图:

示例程序界面

http://221.199.150.103/jsj/Html/vc/wen/vcwen12.htm
分享到:
评论

相关推荐

    VC实现使用查找替换对话框实现查找替换功能

    首先,我们需要了解MFC中的CFindReplaceDialog类,它是用于创建和管理查找替换对话框的核心类。这个类提供了接口,允许用户输入要查找的字符串,并设置查找和替换的相关选项,如区分大小写、全词匹配等。 1. **创建...

    MFC通用对话框.pdf

    本文将详细讨论如何在MFC中使用三种通用对话框:文件对话框、查找和替换对话框以及字体对话框。 首先,我们来看文件对话框。文件对话框是Windows系统中非常常见的,用于让用户选择打开或保存文件。在MFC中,文件...

    Visual C++编程技巧 通用对话框

    `CFindReplaceDialog`类支持查找和替换操作,包括是否区分大小写、全词匹配等选项。通过`DoModal`方法显示对话框,并监听`FRDNEXTDOC`或`FRDONE`消息来处理用户操作。 5. 文件对话框(CFileDialog): 文件对话框...

    第9章 特殊对话框的使用

    5. `CFindReplaceDialog` - 实现文本查找和替换操作。 **CColorDialog 类详解** CColorDialog类用于实现颜色选择对话框。用户可以通过这个对话框选择所需的颜色。使用CColorDialog类时,首先需要创建一个对象,...

    VC++文件\VC++知识.

    - `CFindReplaceDialog`:查找/替换对话框,用于在文档中进行查找或替换操作。 - `CFontDialog`:字体对话框,用于让用户选择字体。 - `CPrintDialog`:打印对话框,用于设置打印选项。 - `CPageSetupDialog`:页面...

    VisualC面向对象编程教程对话框高级编程PPT教案学习.pptx

    通用对话框是Windows提供的一种便捷方式,它们是预定义的、可定制的对话框,例如`CColorDialog`用于选择颜色,`CFileDialog`用于打开或保存文件,`CFindReplaceDialog`用于查找和替换文本,`CFontDialog`用于设置...

    部分MFC和API函数

    14. **CFindReplaceDialog类**:用于创建标准的查找/替换对话框。 15. **CFont类**和**CFontDialog类**:分别用于封装GDI中的字体对象和创建字体选择对话框。 16. **CGdiObject类**:GDI绘图工具的基类,包括画刷...

    C++常用类和API函数

    - **简介**:`CFindReplaceDialog` 类用于创建查找和替换对话框。 #### CFont类:封装了Windows图形设备接口(GDI)中的字体对象 - **简介**:`CFont` 类提供了对字体对象的操作,包括创建、删除和设置属性。 #### ...

    MFC常用类的对应的头文件

    - **`CFindReplaceDialog`**: 查找替换对话框。 - **头文件**:`afxdlgs.h` #### 8. 其他类 - **`CCmdTarget`**: 命令目标基类。 - **头文件**:`afxwin.h` - **`CCmdUI`**: UI命令控制类。 - **头文件**:`...

    MFC常用类继承图.doc

    11. **CFindReplaceDialog**:查找替换对话框类,用于显示查找和替换对话框。 12. **CFontDialog**:字体对话框类,用于显示标准的字体选择对话框。 13. **CFile**:文件类,用于文件操作,如打开、读取、写入等。...

    Vc++6.0MFC入门教程,很好的资源。

    7. **文件操作**:MFC提供了CFile类进行文件读写操作,同时,CDocument支持通过CFindReplaceDialog进行文件查找和替换。 8. **事件驱动编程**:理解消息循环和消息映射机制,这是Windows程序的基础。你需要知道如何...

    VC常见问题解答

    `CFindReplaceDialog`类用于创建查找和替换对话框,可以用来在文本编辑器中实现文本搜索和替换功能。 #### 36. 如何理解windows的句柄? 在Windows编程中,句柄是一种引用或指针,用于标识系统中的对象,如窗口、...

    常用MFC和API函数.pdf

    14. **CFindReplaceDialog类**:用于创建查找和替换对话框。 15. **CFont类**:代表了GDI中的字体对象,用于文本的显示。 16. **CFontDialog类**:用于创建字体对话框,让用户可以选择和修改字体属性。 17. **...

    vc 编程实例

    此外,CDocument类支持通过CFindReplaceDialog进行查找替换操作,以及通过CRichEditCtrl类处理富文本文件。 7. MFC数据库编程: MFC包含了ADO(ActiveX Data Objects)和DAO(Data Access Object)类,用于数据库...

    MFC 类库参考手册

    - **CFindReplaceDialog类**:用于查找替换对话框。 - **CPrintDialog类**:用于打印设置对话框。 - **CPageSetupDialog类**:用于页面设置对话框。 - **COleDialog类及其派生类** - **COleDialog类**:提供了...

    MFC+类库结构图2

    - **CFindReplaceDialog**:查找替换对话框类,用于实现文本的查找和替换功能。 - **CPageSetupDialog**:页面设置对话框类,用于设置打印页面的格式。 - **CPrintDialog**:打印对话框类,用于设置打印选项。 - **...

    mfc教程

    3. **文件操作**:MFC提供了CFile、CDocument和CFindReplaceDialog等类,用于文件的读写、查找替换等操作。 4. **数据库访问**:MFC包含了ADO(Microsoft ActiveX Data Objects)和DAO(Data Access Objects)的接口,...

    MFC.Widnows程序设计第2版2

    CDocument和CFile类提供了文件的读写支持,而CFindReplaceDialog类则可以用于实现查找替换功能。此外,通过序列化技术,可以将文档数据与磁盘文件关联,实现保存和加载文档的功能。 数据库编程是MFC的另一个重要...

    MFC类对应的头文件

    `CFindReplaceDialog` 类用于创建查找替换对话框。`afxdlgs.h` 头文件中定义了多种对话框类。 ##### CFont (afxwin.h) `CFont` 类表示字体对象。`afxwin.h` 头文件中定义了字体类。 ##### CFontDialog (afxdlgs.h...

    自己制作的MFC7.0树状结构层次图

    - **CFindReplaceDialog**:查找替换对话框类。 - **CFontDialog**:字体选择对话框类。 - **COleDialog**:OLE对话框类,提供了OLE相关的操作。 - **COleBusyDialog**:OLE忙碌对话框类。 - **...

Global site tag (gtag.js) - Google Analytics