分享方式:


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的詳細資訊,請參閱 通用對話框類別

繼承階層架構

CObject

CCmdTarget

CWnd

CDialog

CCommonDialog

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::FindNextCFindReplaceDialog::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。

另請參閱

CCommonDialog 類別
階層架構圖表