CFindReplaceDialog 类

允许在应用程序中实现标准字符串“查找/替换”对话框。

语法

class CFindReplaceDialog : public CCommonDialog

成员

公共构造函数

名称 描述
CFindReplaceDialog::CFindReplaceDialog 调用此函数来构造 CFindReplaceDialog 对象。

公共方法

名称 描述
CFindReplaceDialog::Create 创建并显示 CFindReplaceDialog 对话框。
CFindReplaceDialog::FindNext 调用此函数来确定用户是否要查找查找字符串的下一个匹配项。
CFindReplaceDialog::GetFindString 调用此函数来检索当前查找字符串。
CFindReplaceDialog::GetNotifier 调用此函数来检索已注册消息处理程序中的 FINDREPLACE 结构。
CFindReplaceDialog::GetReplaceString 调用此函数以检索当前替换字符串。
CFindReplaceDialog::IsTerminating 调用此函数来确定对话框是否正在终止。
CFindReplaceDialog::MatchCase 调用此函数来确定用户是否希望精确匹配查找字符串的大小写。
CFindReplaceDialog::MatchWholeWord 调用此函数来确定用户是否希望只匹配整个单词。
CFindReplaceDialog::ReplaceAll 调用此函数来确定用户是否希望替换所有出现的字符串。
CFindReplaceDialog::ReplaceCurrent 调用此函数来确定用户是否希望替换当前单词。
CFindReplaceDialog::SearchDown 调用此函数来确定用户是否希望搜索按向下的方向进行。

公共数据成员

“属性” 描述
CFindReplaceDialog::m_fr 用于自定义 CFindReplaceDialog 对象的结构。

备注

与其他 Windows 常见对话框不同,CFindReplaceDialog 对象是无模式的,允许用户在屏幕上与其他窗口交互。 有两种类型的 CFindReplaceDialog 对象:“查找”对话框和“查找/替换”对话框。 尽管对话框允许用户输入搜索和搜索/替换字符串,但它们不执行任何搜索或替换函数。 必须将这些内容添加到应用程序。

若要构造 CFindReplaceDialog 对象,请使用提供的构造函数(它没有参数)。 由于这是无模式对话框,因此使用 new 运算符在堆上分配对象,而不是在堆栈上。

构造 CFindReplaceDialog 对象后,必须调用 Create 成员函数来创建和显示对话框。

在调用 之前,使用 m_frCreate 结构初始化对话框。 m_fr 结构的类型为 FINDREPLACE。 有关此结构的详细信息,请参阅 Windows SDK。

为了使父窗口收到查找/替换请求的通知,必须使用 Windows RegisterWindowMessage 函数,并在框架窗口中使用处理此已注册消息的 ON_REGISTERED_MESSAGE 消息映射宏。

可以使用 IsTerminating 成员函数确定用户是否决定终止对话框。

CFindReplaceDialog 依赖于 Windows 3.1 和更高版本随附的 COMMDLG.DLL 文件。

若要自定义对话框,请从 CFindReplaceDialog 派生类,提供自定义对话框模板,并添加消息映射以处理来自扩展控件的通知消息。 任何未处理的消息都应传递给基类。

不需要自定义挂钩函数。

有关如何使用 CFindReplaceDialog 的详细信息,请参阅通用对话框类

继承层次结构

CObject

CCmdTarget

CWnd

CDialog

CCommonDialog

CFindReplaceDialog

要求

标头:afxdlgs.h

CFindReplaceDialog::CFindReplaceDialog

构造 CFindReplaceDialog 对象。

CFindReplaceDialog();

注解

由于 CFindReplaceDialog 对象是无模式对话框,因此必须使用 new 运算符在堆上构造它。

在销毁期间,框架尝试对指向对话框的指针执行 delete this; 操作。 如果在堆栈上创建了对话框,则 this 指针不存在,可能会导致未定义的行为。

有关 CFindReplaceDialog 对象构造的详细信息,请参阅 CFindReplaceDialog 概述。 使用 CFindReplaceDialog::Create 成员函数显示对话框。

示例

// m_pFRDlg is a pointer to a class derived from CFindReplaceDialog
// which defines variables used by the FINDREPLACE structure.
// InitFindReplaceDlg creates a CFindReplaceDialog and initializes
// the m_fr with the data members from the derived class
void CMyRichEditView::InitFindReplaceDlg()
{
   if (NULL == m_pFRDlg)
   {
      m_pFRDlg = new CMyFindReplaceDialog(); // Must be created on the heap

      m_pFRDlg->Create(TRUE, _T(""), _T(""), FR_DOWN, this);

      m_pFRDlg->m_fr.lStructSize = sizeof(FINDREPLACE);
      m_pFRDlg->m_fr.hwndOwner = this->m_hWnd;
      m_pFRDlg->m_fr.lpstrFindWhat = m_pFRDlg->GetFindWhatStr();
      m_pFRDlg->m_fr.lpstrReplaceWith = m_pFRDlg->GetReplaceWithStr();
      m_pFRDlg->m_fr.wFindWhatLen = m_pFRDlg->GetFindWhatStrLen();
      m_pFRDlg->m_fr.wReplaceWithLen = m_pFRDlg->GetReplaceWithStrLen();
   }
}

CFindReplaceDialog::Create

创建并显示“查找”或“查找/替换”对话框对象,具体取决于 bFindDialogOnly 的值。

virtual BOOL Create(
    BOOL bFindDialogOnly,
    LPCTSTR lpszFindWhat,
    LPCTSTR lpszReplaceWith = NULL,
    DWORD dwFlags = FR_DOWN,
    CWnd* pParentWnd = NULL);

参数

bFindDialogOnly
将此参数设置为 TRUE 以显示“查找”对话框。 将其设置为 FALSE 以显示“查找/替换”对话框

lpszFindWhat
当对话框出现时,指向默认搜索字符串的指针。 如果为 NULL,则对话框不包含默认搜索字符串。

lpszReplaceWith
当对话框出现时,指向默认替换字符串的指针。 如果为 NULL,则对话框不包含默认替换字符串。

dwFlags
可以使用一个或多个标志来自定义对话框的设置,并使用按位“或”运算符组合这些设置。 默认值为 FR_DOWN,它指定搜索按向下的方向进行。 有关这些标志的详细信息,请参阅 Windows SDK 中的 FINDREPLACE 结构。

pParentWnd
指向对话框的父窗口或所有者窗口的指针。 这个窗口将接收指示请求查找/替换操作的特殊消息。 如果为 NULL,则使用应用程序的主窗口。

返回值

如果成功创建对话框对象,则为非零;否则为 0。

注解

为了使父窗口收到查找/替换请求的通知,必须使用 Windows RegisterWindowMessage 函数,该函数的返回值是应用程序实例唯一的消息号。 框架窗口应该有一个消息映射条目,该条目声明处理此已注册消息的回调函数(在下面的示例中为 OnFindReplace)。 以下代码片段是一个示例,演示如何对名为 CMyRichEditView 的框架窗口类执行此操作:

// Message handler declared in CMyRichEditView class declaration
protected:
afx_msg LONG OnFindReplace(WPARAM wParam, LPARAM lParam);

 

// Register FindReplace window message.
static UINT WM_FINDREPLACE = ::RegisterWindowMessage(FINDMSGSTRING);

 

// Message map entry to map from message to handler function.
ON_REGISTERED_MESSAGE(WM_FINDREPLACE, &CMyRichEditView::OnFindReplace)

OnFindReplace 函数中,使用 CFindReplaceDialog::FindNext 方法解释用户的意图,并为查找/替换操作创建代码。

示例

请参阅 CFindReplaceDialog::CFindReplaceDialog 的示例。

CFindReplaceDialog::FindNext

从回调函数调用此函数,以确定用户是否要查找搜索字符串的下一个匹配项。

BOOL FindNext() const;

返回值

如果用户想要查找搜索字符串的下一个匹配项,则为非零;否则为 0。

CFindReplaceDialog::GetFindString

从回调函数调用此函数以检索要查找的默认字符串。

CString GetFindString() const;

返回值

要查找的默认字符串。

示例

LRESULT CMyRichEditView::OnFindReplace(WPARAM wparam, LPARAM lparam)
{
   UNREFERENCED_PARAMETER(wparam);

   CFindReplaceDialog *pDlg = CFindReplaceDialog::GetNotifier(lparam);

   if (NULL != pDlg)
   {
      // Use pDlg as a pointer to the existing FindReplace dlg to
      // call CFindReplaceDialog member functions
      if (pDlg->IsTerminating())
      {
         CString csFindString;
         CString csReplaceString;

         csFindString = pDlg->GetFindString();
         csReplaceString = pDlg->GetReplaceString();

         VERIFY(AfxGetApp()->WriteProfileString(AfxGetApp()->m_pszAppName,
                                                _T("FindString"), csFindString));
         VERIFY(AfxGetApp()->WriteProfileString(AfxGetApp()->m_pszAppName,
                                                _T("ReplaceString"), csReplaceString));
      }
   }

   return 0;
}

CFindReplaceDialog::GetNotifier

调用此函数以检索指向当前“查找替换”对话框的指针。

static CFindReplaceDialog* PASCAL GetNotifier(LPARAM lParam);

参数

lParam
传递给框架窗口的 OnFindReplace 成员函数的 lparam 值

返回值

指向当前对话框的指针。

备注

应在回调函数中使用它来访问当前对话框、调用其成员函数和访问 m_fr 结构。

示例

请参阅 CFindReplaceDialog::Create了解有关如何注册 OnFindReplace 处理程序以从“查找替换”对话框接收通知的示例。

LRESULT CMyRichEditView::OnFindReplace(WPARAM wparam, LPARAM lparam)
{
   UNREFERENCED_PARAMETER(wparam);

   CFindReplaceDialog *pDlg = CFindReplaceDialog::GetNotifier(lparam);

   if (NULL != pDlg)
   {
      // Use pDlg as a pointer to the existing FindReplace dlg to
      // call CFindReplaceDialog member functions
      if (pDlg->IsTerminating())
      {
         CString csFindString;
         CString csReplaceString;

         csFindString = pDlg->GetFindString();
         csReplaceString = pDlg->GetReplaceString();

         VERIFY(AfxGetApp()->WriteProfileString(AfxGetApp()->m_pszAppName,
                                                _T("FindString"), csFindString));
         VERIFY(AfxGetApp()->WriteProfileString(AfxGetApp()->m_pszAppName,
                                                _T("ReplaceString"), csReplaceString));
      }
   }

   return 0;
}

CFindReplaceDialog::GetReplaceString

调用此函数以检索当前替换字符串。

CString GetReplaceString() const;

返回值

用于替换已找到的字符串的默认字符串。

示例

请参阅 的示例。

CFindReplaceDialog::IsTerminating

在回调函数中调用此函数以确定用户是否决定终止对话框。

BOOL IsTerminating() const;

返回值

如果用户决定终止对话框,则为非零;否则为 0。

示例

请参阅 的示例。

CFindReplaceDialog::m_fr

用于自定义 CFindReplaceDialog 对象。

FINDREPLACE m_fr;

备注

m_fr 是类型为 FINDREPLACE 的结构。 其成员存储对话框对象的特征。 构造 CFindReplaceDialog 对象后,可以使用 m_fr 修改对话框中各种值。

有关此结构的详细信息,请参阅 Windows SDK 中的 FINDREPLACE 结构。

示例

请参阅 CFindReplaceDialog::CFindReplaceDialog 的示例。

CFindReplaceDialog::MatchCase

调用此函数来确定用户是否希望精确匹配查找字符串的大小写。

BOOL MatchCase() const;

返回值

如果用户想要查找与搜索字符串大小写完全匹配的搜索字符串的匹配项,则为非零;否则为 0。

CFindReplaceDialog::MatchWholeWord

调用此函数来确定用户是否希望只匹配整个单词。

BOOL MatchWholeWord() const;

返回值

如果用户只想匹配搜索字符串中的所有单词,则为非零;否则0。

CFindReplaceDialog::ReplaceAll

调用此函数来确定用户是否希望替换所有出现的字符串。

BOOL ReplaceAll() const;

返回值

如果用户请求替换所有与替换字符串匹配的字符串,则为非零;否则为 0。

CFindReplaceDialog::ReplaceCurrent

调用此函数来确定用户是否希望替换当前单词。

BOOL ReplaceCurrent() const;

返回值

如果用户请求将当前选定的字符串替换为替换字符串,则为非零;否则为 0。

CFindReplaceDialog::SearchDown

调用此函数来确定用户是否希望搜索按向下的方向进行。

BOOL SearchDown() const;

返回值

如果用户希望搜索向下进行,则为非零;如果用户希望搜索向上进行,则为 0。

另请参阅

CCommonDialog 类
层次结构图