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 成員函式來建立並顯示對話方塊。
在呼叫 Create
之前,請使用 m_fr 結構來初始化對話方塊。 結構 m_fr
的類型 為 FINDREPLACE。 如需此結構的詳細資訊,請參閱 Windows SDK。
為了讓父視窗收到尋找/取代要求的通知,您必須使用 Windows RegisterWindowMessage 函式,並在處理此已註冊訊息的框架視窗中使用 ON_REGISTERED_MESSAGE 訊息對應巨集。
您可以判斷使用者是否已決定使用成員函式終止對話框 IsTerminating
。
CFindReplaceDialog
依賴隨附於 Windows 3.1 版和更新版本的COMMDLG.DLL檔案。
若要自定義對話框,請從 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
根據 的值 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,指定搜尋會往下繼續。 如需這些旗標的詳細資訊,請參閱 Windows SDK 中的 FINDREPLACE 結構。
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
傳遞至框架視窗成員函式的 OnFindReplace
lparam 值。
傳回值
目前對話框的指標。
備註
它應該在您的回呼函式內用來存取目前的對話框、呼叫其成員函式,以及存取 m_fr
結構。
範例
如需如何註冊 OnFindReplace 處理程式以從 [尋找取代] 對話方塊接收通知的範例,請參閱 CFindReplaceDialog::Create 。
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 類型的結構。 其成員會儲存對話框物件的特性。 建 CFindReplaceDialog
構 物件之後,您可以使用 m_fr
來修改對話框中的各種值。
如需此結構的詳細資訊,請參閱 FINDREPLACE
Windows SDK 中的 結構。
範例
請參閱 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。