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 2 種類があります。 ダイアログ ボックスを使用すると、検索と検索/置換の文字列を入力できますが、検索や置換の関数は実行されません。 これらをアプリケーションに追加する必要があります。

オブジェクトを CFindReplaceDialog 構築するには、指定されたコンストラクターを使用します (引数はありません)。 これはモードレス ダイアログ ボックスであるため、スタックではなく演算子を使用して new ヒープにオブジェクトを割り当てます。

オブジェクトがCFindReplaceDialog作成されたら、Create メンバー関数を呼び出してダイアログ ボックスを作成して表示する必要があります。

m_fr構造体を使用して、呼び出すCreate前にダイアログ ボックスを初期化します。 構造体の型m_fr FINDREPLACE です。 この構造の詳細については、Windows SDK を参照してください。

検索/置換要求を親ウィンドウに通知するには、Windows RegisterWindowMessage 関数を使用し、この登録済みメッセージを処理するフレーム ウィンドウで ON_REGISTERED_MESSAGE message-map マクロを使用する必要があります。

ユーザーがメンバー関数を使用してダイアログ ボックス IsTerminating を終了することを決定したかどうかを確認できます。

CFindReplaceDialog は、Windows バージョン 3.1 以降に付属する COMMDLG.DLL ファイルに依存しています。

ダイアログ ボックスをカスタマイズするには、クラスを CFindReplaceDialog派生させ、カスタム ダイアログ テンプレートを指定し、拡張コントロールからの通知メッセージを処理するメッセージ マップを追加します。 未処理のメッセージは、基底クラスに渡す必要があります。

フック機能のカスタマイズは必要ありません。

使用CFindReplaceDialogの詳細については、「共通ダイアログ クラス」を参照してください

継承階層

CObject

CCmdTarget

CWnd

Cdialog

CCommonDialog

CFindReplaceDialog

必要条件

ヘッダー: afxdlgs.h

CFindReplaceDialog::CFindReplaceDialog

CFindReplaceDialog オブジェクトを構築します。

CFindReplaceDialog();

解説

CFindReplaceDialogオブジェクトはモードレス ダイアログ ボックスであるため、演算子を使用してヒープ上に作成するnew必要があります。

破棄中、フレームワークはダイアログ ボックスへのポインターに対して a を実行 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 に設定します。 [検索/置換] ダイアログ ボックスを表示するにはStandard Editionを FAL に設定します。

lpszFindWhat
ダイアログ ボックスが表示されたときの既定の検索文字列へのポインター。 NULL の場合、ダイアログ ボックスには既定の検索文字列が含まれません。

lpszReplaceWith
ダイアログ ボックスが表示されたときの既定の置換文字列へのポインター。 NULL の場合、ダイアログ ボックスには既定の置換文字列が含まれません。

dwFlags
ビットごとの OR 演算子を使用して、ダイアログ ボックスの設定をカスタマイズするために使用できる 1 つ以上のフラグ。 既定値は FR_DOWN で、検索が下方向に進むよう指定します。 これらのフラグの 詳細については、Windows SDK の FINDREPLACE 構造体を参照してください。

pParentWnd
ダイアログ ボックスの親ウィンドウまたは所有者ウィンドウへのポインター。 これは、検索/置換アクションが要求されたことを示す特別なメッセージを受け取るウィンドウです。 NULL の場合、アプリケーションのメイン ウィンドウが使用されます。

戻り値

ダイアログ ボックス オブジェクトが正常に作成された場合は 0 以外。それ以外の場合は 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 以外。それ以外の場合は 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 以外。それ以外の場合は 0。

CFindReplaceDialog::GetFindString の例を参照してください。

CFindReplaceDialog::m_fr

オブジェクトをカスタマイズ CFindReplaceDialog するために使用します。

FINDREPLACE m_fr;

解説

m_fr は FINDREPLACE 型 の構造体です。 そのメンバーには、ダイアログ ボックス オブジェクトの特性が格納されます。 オブジェクトを CFindReplaceDialog 作成した後、ダイアログ ボックスのさまざまな値を変更するために使用 m_fr できます。

この構造の詳細については、Windows SDK の FINDREPLACE 構造を参照してください。

CFindReplaceDialog::CFindReplaceDialog の例を参照してください。

CFindReplaceDialog::MatchCase

この関数を呼び出して、ユーザーが検索文字列の大文字と小文字を正確に一致させるかどうかを判断します。

BOOL MatchCase() const;

戻り値

ユーザーが検索文字列の大文字と小文字が完全に一致する検索文字列の出現箇所を検索する場合は 0 以外。それ以外の場合は 0。

CFindReplaceDialog::MatchWholeWord

この関数を呼び出して、ユーザーが単語全体のみを照合するかどうかを判断します。

BOOL MatchWholeWord() const;

戻り値

ユーザーが検索文字列の単語全体のみを照合する場合は 0 以外。それ以外の場合は 0。

CFindReplaceDialog::ReplaceAll

この関数を呼び出して、ユーザーが文字列のすべての出現箇所を置き換えるかどうかを判断します。

BOOL ReplaceAll() const;

戻り値

ユーザーが置換文字列に一致するすべての文字列を置換することを要求した場合は 0 以外。それ以外の場合は 0。

CFindReplaceDialog::ReplaceCurrent

この関数を呼び出して、ユーザーが現在の単語を置き換えるかどうかを判断します。

BOOL ReplaceCurrent() const;

戻り値

現在選択されている文字列を置換文字列に置き換えることをユーザーが要求した場合は 0 以外。それ以外の場合は 0。

CFindReplaceDialog::SearchDown

この関数を呼び出して、ユーザーが検索を下方向に進めるかどうかを判断します。

BOOL SearchDown() const;

戻り値

ユーザーが検索を下方向に進めたい場合は 0 以外。ユーザーが検索を上方向に進めたい場合は 0。

関連項目

CCommonDialog クラス
階層図