Sdílet prostřednictvím


CFindReplaceDialog – třída

Umožňuje implementovat standardní řetězcová dialogová okna Najít/Nahradit ve vaší aplikaci.

Syntaxe

class CFindReplaceDialog : public CCommonDialog

Členové

Veřejné konstruktory

Název Popis
CFindReplaceDialog::CFindReplaceDialog Voláním této funkce vytvoříte CFindReplaceDialog objekt.

Veřejné metody

Název Popis
CFindReplaceDialog::Create Vytvoří a zobrazí CFindReplaceDialog dialogové okno.
CFindReplaceDialog::FindNext Voláním této funkce určíte, jestli chce uživatel najít další výskyt řetězce hledání.
CFindReplaceDialog::GetFindString Voláním této funkce načtěte aktuální řetězec hledání.
CFindReplaceDialog::GetNotifier Voláním této funkce načtěte FINDREPLACE strukturu v registrované obslužné rutině zprávy.
CFindReplaceDialog::GetReplaceString Voláním této funkce načtěte aktuální řetězec nahrazení.
CFindReplaceDialog::IsTerminating Voláním této funkce určíte, zda je dialogové okno ukončeno.
CFindReplaceDialog::MatchCase Voláním této funkce určíte, jestli chce uživatel přesně odpovídat případu řetězce hledání.
CFindReplaceDialog::MatchWholeWord Voláním této funkce určíte, jestli chce uživatel odpovídat pouze celým slovům.
CFindReplaceDialog::ReplaceAll Voláním této funkce určíte, jestli chce uživatel nahradit všechny výskyty řetězce.
CFindReplaceDialog::ReplaceCurrent Voláním této funkce určíte, jestli chce uživatel nahradit aktuální slovo.
CFindReplaceDialog::SearchDown Voláním této funkce určíte, jestli chce uživatel, aby hledání pokračovalo směrem dolů.

Veřejné datové členy

Název Popis
CFindReplaceDialog::m_fr Struktura použitá k přizpůsobení objektu CFindReplaceDialog .

Poznámky

Na rozdíl od ostatních běžných dialogových oken CFindReplaceDialog windows jsou objekty bez režimu, což uživatelům umožňuje pracovat s jinými okny, když jsou na obrazovce. Existují dva druhy CFindReplaceDialog objektů: Dialogová okna Najít a Nahradit. I když dialogová okna umožňují uživateli zadávat hledání a hledání a nahrazování řetězců, neprovádí žádné vyhledávání ani nahrazování funkcí. Musíte je přidat do aplikace.

K vytvoření objektu CFindReplaceDialog použijte zadaný konstruktor (který nemá žádné argumenty). Vzhledem k tomu, že se jedná o bezmodální dialogové okno, přidělte objekt v haldě pomocí operátoru new , nikoli na zásobníku.

Po vytvoření objektu CFindReplaceDialog je nutné volat funkci Vytvořit člen vytvořit a zobrazit dialogové okno.

Před voláním Createpoužijte strukturu m_fr k inicializaci dialogového okna . Struktura m_fr je typu FINDREPLACE. Další informace o této struktuře najdete v sadě Windows SDK.

Aby bylo nadřazené okno upozorněno na žádosti o vyhledání/nahrazení, musíte použít funkci Windows RegisterWindowMessage a použít makro mapy zpráv ON_REGISTERED_MESSAGE v okně rámce, které zpracovává tuto registrovanou zprávu.

Můžete určit, jestli se uživatel rozhodl dialogové okno ukončit pomocí IsTerminating členské funkce.

CFindReplaceDialog spoléhá na COMMDLG.DLL soubor, který je dodáván s Windows verze 3.1 a novější.

Chcete-li přizpůsobit dialogové okno, odvodit třídu z CFindReplaceDialog, poskytnout vlastní šablonu dialogového okna a přidat mapu zpráv pro zpracování zpráv z rozšířených ovládacích prvků. Všechny nezpracované zprávy by měly být předány do základní třídy.

Přizpůsobení funkce háku se nevyžaduje.

Další informace o použití CFindReplaceDialognaleznete v tématu Běžné třídy dialogových oken.

Hierarchie dědičnosti

Objekt CObject

CCmdTarget

CWnd

CDialog

CCommonDialog

CFindReplaceDialog

Požadavky

Hlavička: afxdlgs.h

CFindReplaceDialog::CFindReplaceDialog

CFindReplaceDialog Vytvoří objekt.

CFindReplaceDialog();

Poznámky

Vzhledem k tomu, že objekt CFindReplaceDialog je bezmodální dialogové okno, je nutné jej sestavit na haldě pomocí operátoru new .

Během zničení se architektura pokusí provést delete this; ukazatel na dialogové okno. Pokud jste vytvořili dialogové okno v zásobníku, this ukazatel neexistuje a nedefinované chování může mít za následek.

Další informace o konstrukci CFindReplaceDialog objektů naleznete v přehledu CFindReplaceDialog . K zobrazení dialogového okna použijte CFindReplaceDialog::Create členské funkce.

Příklad

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

Vytvoří a zobrazí buď objekt dialogového okna Najít nebo Najít/Nahradit v závislosti na hodnotě bFindDialogOnly.

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

Parametry

bFindDialogOnly
Nastavte tento parametr na HODNOTU TRUE, aby se zobrazilo dialogové okno Najít . Pokud chcete zobrazit dialogové okno Najít/nahradit , nastavte ho na HODNOTU FALSE.

lpszFindWhat
Ukazatel na výchozí hledaný řetězec při zobrazení dialogového okna Pokud je hodnota NULL, dialogové okno neobsahuje výchozí hledaný řetězec.

lpszReplaceWith
Ukazatel na výchozí náhradní řetězec při zobrazení dialogového okna. Pokud je hodnota NULL, dialogové okno neobsahuje výchozí náhradní řetězec.

dwFlags
Jeden nebo více příznaků, které můžete použít k přizpůsobení nastavení dialogového okna v kombinaci pomocí bitové operátoru OR. Výchozí hodnota je FR_DOWN, která určuje, že hledání má pokračovat směrem dolů. Další informace o těchto příznakech najdete ve struktuře FINDREPLACE v sadě Windows SDK.

pParentWnd
Ukazatel na nadřazené okno nebo okno vlastníka dialogového okna Toto je okno, které obdrží zvláštní zprávu označující, že je požadována akce najít/nahradit. Pokud je hodnota NULL, použije se hlavní okno aplikace.

Návratová hodnota

Nenulové, pokud byl objekt dialogového okna úspěšně vytvořen; jinak 0.

Poznámky

Aby bylo nadřazené okno upozorněno na žádosti o vyhledání/nahrazení, musíte použít funkci Windows RegisterWindowMessage , jejíž návratová hodnota je číslo zprávy jedinečné pro instanci aplikace. Okno rámce by mělo mít položku mapy zpráv, která deklaruje funkci zpětného volání ( OnFindReplace v následujícím příkladu), která zpracovává tuto registrovanou zprávu. Následující fragment kódu je příkladem toho, jak to udělat pro třídu okna s rámečkem s názvem 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)

Ve své OnFindReplace funkci interpretujete záměry uživatele pomocí CFindReplaceDialog::FindNext a CFindReplaceDialog::IsTerminating metody a vytvoříte kód pro operace find/replace.

Příklad

Podívejte se na příklad pro CFindReplaceDialog::CFindReplaceDialog.

CFindReplaceDialog::FindNext

Voláním této funkce z funkce zpětného volání určíte, jestli chce uživatel najít další výskyt vyhledávacího řetězce.

BOOL FindNext() const;

Návratová hodnota

Nenulové, pokud chce uživatel najít další výskyt vyhledávacího řetězce; jinak 0.

CFindReplaceDialog::GetFindString

Voláním této funkce z funkce zpětného volání načtěte výchozí řetězec, který se má najít.

CString GetFindString() const;

Návratová hodnota

Výchozí řetězec, který se má najít.

Příklad

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

Voláním této funkce načtěte ukazatel na aktuální dialogové okno Najít nahrazení.

static CFindReplaceDialog* PASCAL GetNotifier(LPARAM lParam);

Parametry

lParam
Hodnota lparam předaná členské funkci okna rámečku OnFindReplace .

Návratová hodnota

Ukazatel na aktuální dialogové okno.

Poznámky

Měla by být použita v rámci funkce zpětného volání pro přístup k aktuálnímu dialogovému okně, volání jejích členských funkcí a přístup ke struktuře m_fr .

Příklad

Viz CFindReplaceDialog::Create příklad registrace obslužné rutiny OnFindReplace pro příjem oznámení z dialogového okna Najít nahrazení.

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

Voláním této funkce načtěte aktuální řetězec nahrazení.

CString GetReplaceString() const;

Návratová hodnota

Výchozí řetězec, kterým chcete nahradit nalezené řetězce.

Příklad

Podívejte se na příklad pro CFindReplaceDialog::GetFindString.

CFindReplaceDialog::IsTerminating

Voláním této funkce v rámci funkce zpětného volání určete, jestli se uživatel rozhodl dialogové okno ukončit.

BOOL IsTerminating() const;

Návratová hodnota

Nenulové, pokud se uživatel rozhodl ukončit dialogové okno; jinak 0.

Příklad

Podívejte se na příklad pro CFindReplaceDialog::GetFindString.

CFindReplaceDialog::m_fr

Slouží k přizpůsobení objektu CFindReplaceDialog .

FINDREPLACE m_fr;

Poznámky

m_fr je struktura typu FINDREPLACE. Jeho členové ukládají vlastnosti objektu dialogového okna. Po vytvoření objektu CFindReplaceDialog můžete použít m_fr k úpravě různých hodnot v dialogovém okně.

Další informace o této struktuře naleznete ve FINDREPLACE struktuře v sadě Windows SDK.

Příklad

Podívejte se na příklad pro CFindReplaceDialog::CFindReplaceDialog.

CFindReplaceDialog::MatchCase

Voláním této funkce určíte, jestli chce uživatel přesně odpovídat případu řetězce hledání.

BOOL MatchCase() const;

Návratová hodnota

Nenulové, pokud chce uživatel najít výskyty vyhledávacího řetězce, které přesně odpovídají případu hledaného řetězce; jinak 0.

CFindReplaceDialog::MatchWholeWord

Voláním této funkce určíte, jestli chce uživatel odpovídat pouze celým slovům.

BOOL MatchWholeWord() const;

Návratová hodnota

Nenulové, pokud chce uživatel shodovat pouze celá slova hledaného řetězce; jinak 0.

CFindReplaceDialog::ReplaceAll

Voláním této funkce určíte, jestli chce uživatel nahradit všechny výskyty řetězce.

BOOL ReplaceAll() const;

Návratová hodnota

Nenulové, pokud uživatel požádal o nahrazení všech řetězců odpovídajících náhražce; jinak 0.

CFindReplaceDialog::ReplaceCurrent

Voláním této funkce určíte, jestli chce uživatel nahradit aktuální slovo.

BOOL ReplaceCurrent() const;

Návratová hodnota

Nenulové, pokud uživatel požádal o nahrazení aktuálně vybraného řetězce řetězcem; jinak 0.

CFindReplaceDialog::SearchDown

Voláním této funkce určíte, jestli chce uživatel, aby hledání pokračovalo směrem dolů.

BOOL SearchDown() const;

Návratová hodnota

Nenulové, pokud chce uživatel, aby hledání pokračovalo směrem dolů; 0, pokud chce uživatel, aby hledání pokračovalo směrem nahoru.

Viz také

CCommonDialog – třída
Graf hierarchie