検索置換ダイアログ


文字列の検索、置換を行うお馴染みのダイアログボックス。
    
    クラス名: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       |     [単語単位で探す]をチェック有りにする             |
    -----------------------------------------------------------------------------