次の方法で共有


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 メンバー関数を呼び出して、ダイアログ ボックスを作成して表示する必要があります。

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

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

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

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

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

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

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

継承階層

CObject

CCmdTarget

CWnd

CDialog

CCommonDialog

CFindReplaceDialog

要件

Header: 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
Find ダイアログ ボックスを表示するには、このパラメーターを TRUE に設定します。 FALSE に設定すると、 Find/Replace ダイアログ ボックスが表示されます。

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 クラス
階層図