Поделиться через


Класс 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::Match Кто leWord Вызовите эту функцию, чтобы определить, хочет ли пользователь соответствовать только всем словам.
CFindReplaceDialog::ReplaceAll Вызовите эту функцию, чтобы определить, требуется ли пользователю заменить все вхождения строки.
CFindReplaceDialog::ReplaceCurrent Вызовите эту функцию, чтобы определить, хотите ли пользователь заменить текущее слово.
CFindReplaceDialog::SearchDown Вызовите эту функцию, чтобы определить, хочет ли пользователь продолжить поиск в направлении вниз.

Открытые члены данных

Имя Описание
CFindReplaceDialog::m_fr Структура, используемая для настройки CFindReplaceDialog объекта.

Замечания

В отличие от других распространенных диалоговых окон Windows, CFindReplaceDialog объекты являются бессерверными, позволяя пользователям взаимодействовать с другими окнами во время их работы на экране. Существует два типа объектов: диалоговое CFindReplaceDialog окно поиска и замена диалоговых окон. Хотя диалоговые окна позволяют пользователю вводить и искать и заменять строки, они не выполняют какие-либо функции поиска или замены. Их необходимо добавить в приложение.

Чтобы создать объект, используйте предоставленный CFindReplaceDialog конструктор (который не имеет аргументов). Так как это диалоговое окно без режима, выделите объект в куче с помощью new оператора, а не в стеке.

CFindReplaceDialog После создания объекта необходимо вызвать функцию Create member, чтобы создать и отобразить диалоговое окно.

Используйте структуру m_fr для инициализации диалогового окна перед вызовом Create. Структура m_fr имеет тип FINDREPLACE. Дополнительные сведения об этой структуре см. в пакете SDK для Windows.

Чтобы родительское окно было уведомлено о запросах поиска и замены, необходимо использовать функцию Windows RegisterWindowMessage и использовать макрос карты сообщений ON_REGISTERED_MESSAGE в окне кадра, обрабатывающего это зарегистрированное сообщение.

Вы можете определить, решил ли пользователь завершить диалоговое окно с IsTerminating функцией-членом.

CFindReplaceDialog используется файл COMMDLG.DLL, который поставляется с Windows версии 3.1 и более поздними версиями.

Чтобы настроить диалоговое окно, наследуйте класс, 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

Создает и отображает объект диалогового окна Find или Find/Replace в зависимости от значения 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
Один или несколько флагов, которые можно использовать для настройки параметров диалогового окна, в сочетании с побитовым оператором OR. Значение по умолчанию — FR_DOWN, указывающее, что поиск выполняется в направлении вниз. Дополнительные сведения об этих флагах см. в структуре FINDREPLACE в пакете SDK для Windows.

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::IsTerminating и создаете код для операций поиска и замены.

Пример

См. пример 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
Значение lparam , переданное функции-член окна кадра OnFindReplace .

Возвращаемое значение

Указатель на текущее диалоговое окно.

Замечания

Он должен использоваться в функции обратного вызова для доступа к текущему диалоговому окне, вызова его функций-членов и доступа к m_fr структуре.

Пример

Пример регистрации обработчика OnFindReplaceDialog::Create для получения уведомлений из диалогового окна "Поиск замены" см. в разделе CFindReplace.

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 ::GetFindString.

CFindReplaceDialog::IsTerminating

Вызовите эту функцию в функции обратного вызова, чтобы определить, решил ли пользователь завершить диалоговое окно.

BOOL IsTerminating() const;

Возвращаемое значение

Ненулевое значение, если пользователь решил завершить диалоговое окно; в противном случае — 0.

Пример

См. пример CFindReplaceDialog ::GetFindString.

CFindReplaceDialog::m_fr

Используется для настройки CFindReplaceDialog объекта.

FINDREPLACE m_fr;

Замечания

m_fr — это структура типа FINDREPLACE. Его члены хранят характеристики объекта диалогового окна. После создания объекта можно использовать m_fr для изменения различных значений CFindReplaceDialog в диалоговом окне.

Дополнительные сведения об этой структуре см FINDREPLACE . в структуре пакета SDK для Windows.

Пример

См. пример CFindReplaceDialog ::CFindReplaceDialog.

CFindReplaceDialog::MatchCase

Вызовите эту функцию, чтобы определить, хочет ли пользователь точно соответствовать регистру строки поиска.

BOOL MatchCase() const;

Возвращаемое значение

Ненулевое значение, если пользователь хочет найти вхождения строки поиска, которая точно соответствует регистру строки поиска; в противном случае — 0.

CFindReplaceDialog::Match Кто leWord

Вызовите эту функцию, чтобы определить, хочет ли пользователь соответствовать только всем словам.

BOOL MatchWholeWord() const;

Возвращаемое значение

Ненулевое значение, если пользователь хочет соответствовать только всем словам строки поиска; в противном случае — 0.

CFindReplaceDialog::ReplaceAll

Вызовите эту функцию, чтобы определить, требуется ли пользователю заменить все вхождения строки.

BOOL ReplaceAll() const;

Возвращаемое значение

Ненулевое значение, если пользователь попросил заменить все строки, соответствующие строке замены; в противном случае — 0.

CFindReplaceDialog::ReplaceCurrent

Вызовите эту функцию, чтобы определить, хотите ли пользователь заменить текущее слово.

BOOL ReplaceCurrent() const;

Возвращаемое значение

Ненулевое значение, если пользователь запросил, что выбранная в данный момент строка будет заменена строкой замены; в противном случае — 0.

CFindReplaceDialog::SearchDown

Вызовите эту функцию, чтобы определить, хочет ли пользователь продолжить поиск в направлении вниз.

BOOL SearchDown() const;

Возвращаемое значение

Ненулевое значение, если пользователь хочет, чтобы поиск продолжался в направлении вниз; Значение 0, если пользователь хочет, чтобы поиск продолжался в направлении вверх.

См. также

Класс CCommonDialog
Диаграмма иерархии