Класс 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 member, чтобы создать и отобразить диалоговое окно.
Используйте структуру m_fr для инициализации диалогового окна перед вызовом Create
. Структура m_fr
имеет тип FINDREPLACE. Дополнительные сведения об этой структуре см. в пакете SDK для Windows.
Чтобы родительское окно было уведомлено о запросах поиска и замены, необходимо использовать функцию Windows RegisterWindowMessage и использовать макрос карты сообщений ON_REGISTERED_MESSAGE в окне кадра, обрабатывающего это зарегистрированное сообщение.
Вы можете определить, решил ли пользователь завершить диалоговое окно с IsTerminating
функцией-членом.
CFindReplaceDialog
использует файл COMMDLG.DLL, который поставляется с Windows версии 3.1 и более поздними версиями.
Чтобы настроить диалоговое окно, наследуйте класс, CFindReplaceDialog
предоставьте пользовательский шаблон диалогового окна и добавьте карту сообщений для обработки уведомлений из расширенных элементов управления. Все необработанные сообщения должны передаваться в базовый класс.
Настройка функции перехватчика не требуется.
Дополнительные сведения об использовании CFindReplaceDialog
см. в разделе "Общие классы диалогов".
Иерархия наследования
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::MatchWholeWord
Вызовите эту функцию, чтобы определить, хочет ли пользователь соответствовать только всем словам.
BOOL MatchWholeWord() const;
Возвращаемое значение
Ненулевое значение, если пользователь хочет соответствовать только всем словам строки поиска; в противном случае — 0.
CFindReplaceDialog::ReplaceAll
Вызовите эту функцию, чтобы определить, требуется ли пользователю заменить все вхождения строки.
BOOL ReplaceAll() const;
Возвращаемое значение
Ненулевое значение, если пользователь попросил заменить все строки, соответствующие строке замены; в противном случае — 0.
CFindReplaceDialog::ReplaceCurrent
Вызовите эту функцию, чтобы определить, хотите ли пользователь заменить текущее слово.
BOOL ReplaceCurrent() const;
Возвращаемое значение
Ненулевое значение, если пользователь запросил, что выбранная в данный момент строка будет заменена строкой замены; в противном случае — 0.
CFindReplaceDialog::SearchDown
Вызовите эту функцию, чтобы определить, хочет ли пользователь продолжить поиск в направлении вниз.
BOOL SearchDown() const;
Возвращаемое значение
Ненулевое значение, если пользователь хочет, чтобы поиск продолжался в направлении вниз; Значение 0, если пользователь хочет, чтобы поиск продолжался в направлении вверх.