Udostępnij za pośrednictwem


Klasa CFindReplaceDialog

Umożliwia zaimplementowanie standardowych okien dialogowych znajdowania/zastępowania ciągów w aplikacji.

Składnia

class CFindReplaceDialog : public CCommonDialog

Elementy członkowskie

Konstruktory publiczne

Nazwa/nazwisko opis
CFindReplaceDialog::CFindReplaceDialog Wywołaj tę funkcję, aby skonstruować CFindReplaceDialog obiekt.

Metody publiczne

Nazwa/nazwisko opis
CFindReplaceDialog::Create Tworzy i wyświetla CFindReplaceDialog okno dialogowe.
CFindReplaceDialog::FindNext Wywołaj tę funkcję, aby określić, czy użytkownik chce znaleźć następne wystąpienie ciągu znajdowania.
CFindReplaceDialog::GetFindString Wywołaj tę funkcję, aby pobrać bieżący ciąg wyszukiwania.
CFindReplaceDialog::GetNotifier Wywołaj tę funkcję, aby pobrać strukturę w zarejestrowanej FINDREPLACE procedurze obsługi komunikatów.
CFindReplaceDialog::GetReplaceString Wywołaj tę funkcję, aby pobrać bieżący ciąg zamiany.
CFindReplaceDialog::IsTerminating Wywołaj tę funkcję, aby określić, czy okno dialogowe kończy działanie.
CFindReplaceDialog::MatchCase Wywołaj tę funkcję, aby określić, czy użytkownik chce dokładnie dopasować przypadek ciągu znajdowania.
CFindReplaceDialog::MatchWholeWord Wywołaj tę funkcję, aby określić, czy użytkownik chce dopasować tylko całe wyrazy.
CFindReplaceDialog::ReplaceAll Wywołaj tę funkcję, aby określić, czy użytkownik chce zastąpić wszystkie wystąpienia ciągu.
CFindReplaceDialog::ReplaceCurrent Wywołaj tę funkcję, aby określić, czy użytkownik chce zastąpić bieżące słowo.
CFindReplaceDialog::SearchDown Wywołaj tę funkcję, aby określić, czy użytkownik chce, aby wyszukiwanie było kontynuowane w kierunku w dół.

Publiczne elementy członkowskie danych

Nazwa/nazwisko opis
CFindReplaceDialog::m_fr Struktura używana do dostosowywania CFindReplaceDialog obiektu.

Uwagi

W przeciwieństwie do innych typowych okien dialogowych systemu CFindReplaceDialog Windows obiekty są moderowane, co pozwala użytkownikom na interakcję z innymi oknami, gdy są na ekranie. Istnieją dwa rodzaje CFindReplaceDialog obiektów: znajdź okna dialogowe i okna dialogowe Znajdź/Zamień. Mimo że okna dialogowe umożliwiają użytkownikowi wprowadzanie wyszukiwania i wyszukiwania/zastępowania ciągów, nie wykonują żadnych funkcji wyszukiwania ani zastępowania. Należy je dodać do aplikacji.

Aby skonstruować CFindReplaceDialog obiekt, użyj dostarczonego konstruktora (który nie ma argumentów). Ponieważ jest to okno dialogowe bez moderowania, przydziel obiekt na stercie przy użyciu new operatora, a nie na stosie.

Po utworzeniu CFindReplaceDialog obiektu należy wywołać funkcję Tworzenie elementu członkowskiego, aby utworzyć i wyświetlić okno dialogowe.

Użyj struktury m_fr, aby zainicjować okno dialogowe przed wywołaniem metody Create. Struktura m_fr jest typu FINDREPLACE. Aby uzyskać więcej informacji na temat tej struktury, zobacz Zestaw WINDOWS SDK.

Aby okno nadrzędne było powiadamiane o żądaniach znajdowania/zastępowania, należy użyć funkcji Windows RegisterWindowMessage i użyć makra ON_REGISTERED_MESSAGE message-map w oknie ramki, które obsługuje ten zarejestrowany komunikat.

Możesz określić, czy użytkownik zdecydował się zakończyć okno dialogowe z funkcją składową IsTerminating .

CFindReplaceDialog korzysta z pliku COMMDLG.DLL dostarczanego z systemem Windows w wersji 3.1 lub nowszej.

Aby dostosować okno dialogowe, utwórz klasę z CFindReplaceDialogklasy , podaj niestandardowy szablon okna dialogowego i dodaj mapę komunikatów w celu przetworzenia komunikatów powiadomień z rozszerzonych kontrolek. Wszystkie nieprzetworzone komunikaty powinny być przekazywane do klasy bazowej.

Dostosowywanie funkcji haka nie jest wymagane.

Aby uzyskać więcej informacji na temat korzystania z programu CFindReplaceDialog, zobacz Typowe klasy okien dialogowych.

Hierarchia dziedziczenia

Obiekt CObject

CCmdTarget

CWnd

CDialog

CCommonDialog

CFindReplaceDialog

Wymagania

Nagłówek: afxdlgs.h

CFindReplaceDialog::CFindReplaceDialog

CFindReplaceDialog Tworzy obiekt.

CFindReplaceDialog();

Uwagi

CFindReplaceDialog Ponieważ obiekt jest moderowym okno dialogowe, należy go skonstruować na stercie przy użyciu new operatora .

Podczas niszczenia struktura próbuje wykonać wskaźnik delete this; w oknie dialogowym. Jeśli utworzono okno dialogowe na stosie, this wskaźnik nie istnieje i niezdefiniowane zachowanie może spowodować.

Aby uzyskać więcej informacji na temat budowy CFindReplaceDialog obiektów, zobacz Omówienie CFindReplaceDialog . Użyj funkcji CFindReplaceDialog::Create, aby wyświetlić okno dialogowe.

Przykład

// 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

Tworzy i wyświetla obiekt okna dialogowego Znajdź lub Znajdź/Zamień w zależności od wartości bFindDialogOnly.

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

Parametry

bFindDialogOnly
Ustaw ten parametr na wartość TRUE, aby wyświetlić okno dialogowe Znajdowanie . Ustaw wartość FALSE, aby wyświetlić okno dialogowe Znajdź/Zamień .

lpszFindWhat
Wskaźnik do domyślnego ciągu wyszukiwania po wyświetleniu okna dialogowego. Jeśli wartość NULL, okno dialogowe nie zawiera domyślnego ciągu wyszukiwania.

lpszReplaceWith
Wskaźnik do domyślnego ciągu zastępczego po wyświetleniu okna dialogowego. Jeśli wartość NULL, okno dialogowe nie zawiera domyślnego ciągu zastępczego.

dwFlags
Co najmniej jedna flaga, której można użyć do dostosowania ustawień okna dialogowego, połączonego za pomocą operatora bitowego OR. Wartość domyślna to FR_DOWN, która określa, że wyszukiwanie ma być kontynuowane w kierunku w dół. Aby uzyskać więcej informacji na temat tych flag, zobacz strukturę FINDREPLACE w zestawie WINDOWS SDK.

pParentWnd
Wskaźnik do okna nadrzędnego lub okna właściciela okna dialogowego. Jest to okno, które otrzyma specjalny komunikat informujący o żądaniu akcji znajdź/zamień. Jeśli wartość NULL, zostanie użyte główne okno aplikacji.

Wartość zwracana

Niezero, jeśli obiekt okna dialogowego został pomyślnie utworzony; w przeciwnym razie 0.

Uwagi

Aby okno nadrzędne było powiadamiane o żądaniach znajdowania/zastępowania, należy użyć funkcji RegisterWindowMessage systemu Windows, której wartość zwracana jest liczbą komunikatów unikatową dla wystąpienia aplikacji. Okno ramki powinno zawierać wpis mapy komunikatów, który deklaruje funkcję wywołania zwrotnego ( OnFindReplace w poniższym przykładzie), która obsługuje ten zarejestrowany komunikat. Poniższy fragment kodu jest przykładem tego, jak to zrobić dla klasy okna ramowego o nazwie 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 W ramach funkcji interpretujesz intencje użytkownika przy użyciu metod CFindReplaceDialog::FindNext i CFindReplaceDialog::IsTerminating, a następnie utworzysz kod dla operacji znajdowania/zastępowania.

Przykład

Zobacz przykład CFindReplaceDialog ::CFindReplaceDialog.

CFindReplaceDialog::FindNext

Wywołaj tę funkcję z funkcji wywołania zwrotnego, aby określić, czy użytkownik chce znaleźć następne wystąpienie ciągu wyszukiwania.

BOOL FindNext() const;

Wartość zwracana

Nonzero, jeśli użytkownik chce znaleźć następne wystąpienie ciągu wyszukiwania; w przeciwnym razie 0.

CFindReplaceDialog::GetFindString

Wywołaj tę funkcję z funkcji wywołania zwrotnego, aby pobrać ciąg domyślny do znalezienia.

CString GetFindString() const;

Wartość zwracana

Ciąg domyślny do znalezienia.

Przykład

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

Wywołaj tę funkcję, aby pobrać wskaźnik do bieżącego okna dialogowego Znajdź zamień.

static CFindReplaceDialog* PASCAL GetNotifier(LPARAM lParam);

Parametry

lParam
Wartość lparam przekazana do funkcji składowej OnFindReplace okna ramowego.

Wartość zwracana

Wskaźnik do bieżącego okna dialogowego.

Uwagi

Powinna być używana w funkcji wywołania zwrotnego w celu uzyskania dostępu do bieżącego okna dialogowego, wywoływania funkcji składowych i uzyskiwania m_fr dostępu do struktury.

Przykład

Zobacz CFindReplaceDialog::Create , aby zapoznać się z przykładem rejestrowania procedury obsługi OnFindReplace w celu odbierania powiadomień z okna dialogowego Znajdowanie zamiany.

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

Wywołaj tę funkcję, aby pobrać bieżący ciąg zamiany.

CString GetReplaceString() const;

Wartość zwracana

Ciąg domyślny, za pomocą którego można zastąpić znalezione ciągi.

Przykład

Zobacz przykład CFindReplaceDialog::GetFindString.

CFindReplaceDialog::IsTerminating

Wywołaj tę funkcję w funkcji wywołania zwrotnego, aby określić, czy użytkownik zdecydował się zakończyć działanie okna dialogowego.

BOOL IsTerminating() const;

Wartość zwracana

Nonzero, jeśli użytkownik zdecydował się zakończyć okno dialogowe; w przeciwnym razie 0.

Przykład

Zobacz przykład CFindReplaceDialog::GetFindString.

CFindReplaceDialog::m_fr

Służy do dostosowywania CFindReplaceDialog obiektu.

FINDREPLACE m_fr;

Uwagi

m_fr jest strukturą typu FINDREPLACE. Jego elementy członkowskie przechowują cechy obiektu okna dialogowego. Po utworzeniu CFindReplaceDialog obiektu można użyć m_fr polecenia , aby zmodyfikować różne wartości w oknie dialogowym.

Aby uzyskać więcej informacji na temat tej struktury, zobacz FINDREPLACE strukturę w zestawie Windows SDK.

Przykład

Zobacz przykład CFindReplaceDialog ::CFindReplaceDialog.

CFindReplaceDialog::MatchCase

Wywołaj tę funkcję, aby określić, czy użytkownik chce dokładnie dopasować przypadek ciągu znajdowania.

BOOL MatchCase() const;

Wartość zwracana

Nonzero, jeśli użytkownik chce znaleźć wystąpienia ciągu wyszukiwania, które dokładnie pasują do wielkości liter ciągu wyszukiwania; w przeciwnym razie 0.

CFindReplaceDialog::MatchWholeWord

Wywołaj tę funkcję, aby określić, czy użytkownik chce dopasować tylko całe wyrazy.

BOOL MatchWholeWord() const;

Wartość zwracana

Nonzero, jeśli użytkownik chce dopasować tylko całe wyrazy ciągu wyszukiwania; w przeciwnym razie 0.

CFindReplaceDialog::ReplaceAll

Wywołaj tę funkcję, aby określić, czy użytkownik chce zastąpić wszystkie wystąpienia ciągu.

BOOL ReplaceAll() const;

Wartość zwracana

Nonzero, jeśli użytkownik zażądał, aby wszystkie ciągi pasujące do ciągu zamieniania zostały zastąpione; w przeciwnym razie 0.

CFindReplaceDialog::ReplaceCurrent

Wywołaj tę funkcję, aby określić, czy użytkownik chce zastąpić bieżące słowo.

BOOL ReplaceCurrent() const;

Wartość zwracana

Nonzero, jeśli użytkownik zażądał, aby aktualnie wybrany ciąg został zastąpiony ciągiem zamiany; w przeciwnym razie 0.

CFindReplaceDialog::SearchDown

Wywołaj tę funkcję, aby określić, czy użytkownik chce, aby wyszukiwanie było kontynuowane w kierunku w dół.

BOOL SearchDown() const;

Wartość zwracana

Nonzero, jeśli użytkownik chce, aby wyszukiwanie było kontynuowane w kierunku w dół; 0, jeśli użytkownik chce, aby wyszukiwanie przebiegało w górę.

Zobacz też

Klasa CCommonDialog
Wykres hierarchii