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 ダイアログ クラスを参照してください。
継承階層
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
は、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。