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 Create
použ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í CFindReplaceDialog
naleznete v tématu Běžné třídy dialogových oken.
Hierarchie dědičnosti
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.