SSブログ

検索・置換ダイアログ [プログラミング]

CFindReplaceDialogという文字列の検索用と置換用のダイアログがありました。

在るのはいいけど、使い方が解らない。

そこで、VisualC++ に付属しているMFCのソースファイルの中からCFindReplaceDialogを使っているところを探してみると、CEditViewが使っているのを発見。

実際の使い方はCEditViewのソース(VIEWEDIT.CPP)から判明したんですが、なにやら引っかかる記述が…。

(VIEWEDIT.CPPから抜粋)

pEditState->pFindReplaceDlg = new CFindReplaceDialog;
if (!pEditState->pFindReplaceDlg->Create(bFindOnly, strFind, strReplace, dwFlags, this))
{
    pEditState->pFindReplaceDlg = NULL;
    return;
}

newしているのにdeleteしていない。

この箇所だけに限らず、newしたCFindReplaceDialogdeleteしているところが無い。
うっかりミスにしてはシャレにならないので、よく調べてみると………。

(DLGFR.CPPから抜粋)

void CFindReplaceDialog::PostNcDestroy()
{
    delete this;
}

WM_NCDESTROYメッセージを受け取った後(要はウィンドウを閉じた時)の処理で自分自身をdeleteしています。

と言う事は、CFindReplaceDialogを使う場合は

  • 必ずnew CFindReplaceDialogとして構築する。
  • deleteは実行してはいけない。

となるわけですが、ヘルプには、そんな事は一言も書いてなくて、

このダイアログ ボックスはモードレス ダイアログ ボックスなので、オブジェクトはスタック上ではなく、new 演算子を使ってヒープ領域に確保されます。

この様に、モードレスダイアログとして使うためにnewしなければいけないみたいな書き方、と言うか、このダイアログを作ると勝手にnewされるみたいな書き方がしてあるのはなぁ…。

[飛行機] 今日の三冊
西の善き魔女外伝〈1〉金の糸紡げば (C・NOVELSファンタジア)

西の善き魔女外伝〈1〉金の糸紡げば (C・NOVELSファンタジア)

  • 作者: 荻原 規子
  • 出版社/メーカー: 中央公論新社
  • 発売日: 2000/01
  • メディア: 新書

タグ:VisualC++
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。