プロが教える店舗&オフィスのセキュリティ対策術

void CDlgTestApp::OnAppExit()
{
// TODO: ここにコマンド ハンドラ コードを追加します。
CDialog endDialog(IDD_DLG_EXIT); // CEndDlgの基本クラスを初期化
if(endDialog.DoModal()==IDOK){
CWinApp::OnAppExit(); // 基本クラスの公開メンバー関数(このアプリケーション自体がCWinAppクラスの派生クラスのオブジェクト(theApp))
}
}

「アプリケーションを終了しますか?」というダイアログのOKボタン(OKかキャンセルボタン)を押したときに、アプリケーションを終了させたいのですが、↑をDlgTestというアプリケーションのアプリケーションクラスのコマンドハンドラとして記述したところ、ちゃんとした動作(アプリの終了)をしています。

ここで質問ですが、
(1)CEndDlgという、ダイアログクラスがありながら、なぜわざわざ、その基本クラスのCDialogクラスのオブジェクトを作成しているのか。CEndDlg endDialog(IDD_DLG_EXIT); じゃだめなのか。

(2) CDlgTestAppというクラスののコマンド(イベント)ハンドラのなかで、その基本クラスのCWinApp::OnAppExit(); と、コードしているのか。こう記述しないとアプリそのものを終了させることは
できないのでしょうか。

その2点がわかりません。(ちなみに上のコードはテキストを参照したのですが)
ご回答、どうぞよろしくお願いします。

A 回答 (1件)

(1)


ヘッダインクルードする手間を省いたんではないでしょうか
>CEndDlg endDialog(IDD_DLG_EXIT);
なんて書くぐらいなら私は CEndDlg endDialog();  で済ませます

(2)
他のコードがないんで詳細不明ですが
そのイベントが動作しているなら基本クラスのCWinApp::OnAppExit();
を呼び出さないと終了することができなくなるはずです

手元で簡単なテストしたら そのイベント走らないので間違ってるかもしれません
VC2010 MFCアプリにて
    • good
    • 0
この回答へのお礼

ご返答、どうもありがとうございました。

お礼日時:2013/10/22 00:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!