検索置換ダイアログ
文字列の検索、置換を行うお馴染みのダイアログボックス。
クラス名:CFindReplaceDialog
ダイアログの種類:モードレス
【メッセージ処理】
検索置換ダイアログはモードレスなのでアプリケーション本体部分とは
別々に動きます。そこでダイアログの情報と本体部分の通信をする必要があります。
この動作は検索置換ダイアログボックスが本体へ向けてメッセージを発行すること
で実現します。その一連の動作に対応するためのプログラミングが必要となる。
【プログラミング概要】
メッセージ処理に必要な対応手順を簡単に説明します
@検索置換ダイアログボックスがメッセージを発行
検索置換ダイアログボックス上の何かのボタンが押されるとFINDMSGSTRING
メッセージが発行される
AメッセージIDを取得
親アプリケーション側ではFINDMSGSTRINGからUNIT型の一意のメッセージIDを得る。
これをWM_FINDREPLACEとする。
static UNIT WM_FINDREPLACE = ::RegisterWindowMessage(FINDMSGSTRING);
BメッセージIDとハンドル関数とを対応付けるメッセージマップエントリを作る
次の例はWM_FINDREPLACEというメッセージIDがきたらOnFindReplaceという関数
を実行しろという記述である。このOnFindReplaceが実際に検索/置換を行う
関数となる
BEGIN_MESSAGE_MAP(任意のダイアログクラス名, CDialog)
ON_REGISTERD_MESSAGE(WM_FINDREPLACE, OnFindReplace)
END_MESSAGE_MAP()
COnFindReplace関数をクラスのメンバとするためにメンバ関数宣言を行う
一般にクラスの中の重要なメンバ関数は、ClassWizardに登録されていて、
そのClassWizard画面で簡単にメンバ関数が宣言できる。しかし検索置換処理
のときは、そのサービスが無いので、メンバ関数を自分で登録する必要がある。
次にその登録例を示します。
class 任意のダイアログクラス名 : public CDialog
{
「既存のコード」
protected:
//追加コード
afx_msg LONG OnFindReplace(WPARAM wParam, LPARAM lParam);
「既存のコード」
};
DOnFindReplaceメンバ関数の実態を記述する
LONG 任意のダイアログクラス名::OnFindReplace(WPARAM wParam, LPARAM lParam)
{
//実態のコードを記述
return 結果;
}
Note : OnFindReplaceはコールバック関数なので、wParamとlParamはシステム側から送られてくる
32ビットの整数値(ビット数は環境に依存)。
その引数の意味は関数により異なる。今回は、コントロール識別として使用している。
【検索置換ダイアログの生成と消滅】
検索置換ダイアログは new 演算子で生成して、create関数で表示します。
また、表示されたダイアログの終了ボタンがクリックされたら、window破棄のために
DestroyWindow関数を使用します。
例)
CFindReplaceDialog* myDLG = new CFindReplaceDialog; //生成
myDLG->Create(TRUE, "", ""); //表示
「任意の処理コード」
myDLG->DestroyWindow(); //消滅
【Create関数の書式】
BOOL Create(BOOL bFindDialogOnly, //窓種別
LPCTSTR lpszFindWhat, //検索文字列
LPCTSTR lpszReplaceWith = NULL, //置換文字列
DWORD dwFlags = FR_DOWN, //初期設定
CWnd* pParentWnd = NULL); //親ウィンドウ
[戻り値] 正常 = 0以外、異常 = 0
[引数]
bFindDialogOnly : TRUE = 検索、FALSE = 置換
lpszFindWhat : 検索するデフォルト文字列
lpszReplaceWith : 置換するデフォルト文字列
dwFlags : ダイアログボックスの設定をカスタマイズするためのフラグ
pParentWnd : 親ウィンドウまたはオーナーウィンドウのポインタ
[dwFlagsの設定]
dwFlagsは以下で示す値をOR演算子でつなぐことにより複数項目の設定が出来ます。
dwFlagsの設定値
-----------------------------------------------------------------------------
| 値 | 説明 |
-----------------------------------------------------------------------------
| FR_DOWN | 検索方向が文末方向(指定がないと文頭方向) |
-----------------------------------------------------------------------------
| FR_FINDNEXT | 次の文字列を検索 |
-----------------------------------------------------------------------------
| FR_HIDEUPDOWN | [検索する方向]グループを隠す |
-----------------------------------------------------------------------------
| FR_HIDEMATCHCASE | [大文字と小文字を区別する]チェックボックスを隠す |
-----------------------------------------------------------------------------
| FR_HIDEWHOLEWORD | [単語単位で探す]チェックボックスを隠す |
-----------------------------------------------------------------------------
| FR_MATCHCASE | [大文字と小文字を区別する]をチェック有りにする |
-----------------------------------------------------------------------------
| FR_NOMATCHCASE | [大文字と小文字を区別する]を薄文字表示にする |
-----------------------------------------------------------------------------
| FR_NOUPDOWN | [上へ]、[下へ]を薄文字表示にする |
-----------------------------------------------------------------------------
| FR_NOWHOLEWORD | [単語単位で探す]を薄文字表示にする |
-----------------------------------------------------------------------------
| FR_SHOWHELP | [ヘルプ]ボタンを表示 |
-----------------------------------------------------------------------------
| FR_WHOLEWORD | [単語単位で探す]をチェック有りにする |
-----------------------------------------------------------------------------