プログラム終了時の処理


プログラム終了時の処理(ダイアログ)

ダイアログベースのプログラムを終了させる場合、次の終了ステータスがある。 OKになる終了の場合はCDialog::OnOK()が、キャンセルになる終了の場合はCDialog::OnCancel()が呼ばれる。 つまりダイアログ終了時に特別な操作を行う場合は、これらの関数をオーバーライドしてそこに記述する。
また、プログラムの終了時に必ず(OKでもキャンセルでも)行いたい操作がある場合は、 ダイアログクラスのデストラクタに記述するのが一般的である。

独自の終了方法を用意する場合は、CDialog::EndDialog関数を呼び出せばよい。

	EndDialog(IDOK);      // OK終了の場合
	EndDialog(IDCANCEL);  // キャンセル終了の場合
ちなみにCDialog::OnOK()やCDialog::OnCancel()はこの関数を呼び出すことで終了処理を実行している。

目次へ



プログラム終了時の処理(ドキュメントビュー形式)

ドキュメントビュー形式のプログラムの終了時に特別な処理を行う場合、次のような方法がある。


ID_APP_EXITのメッセージハンドラを作成する
[ファイル(F)] - [アプリケーションの終了(X)]のデフォルトのメニューIDはID_APP_EXITになっている。 ClassWizardを使ってこれに対するメッセージハンドラOnAppExitを作成すれば、 終了時にこのハンドラ関数が呼び出される。

CWnd::OnDestroy()をオーバーライドする
上記の方法では、タイトルバー右端の「閉じる」ボタンを押した場合には処理が呼び出されない。 いかなる終了方法でも必ず実行したい処理がある場合には、CWnd::OnDestroy()をオーバーライドする。

CWnd::OnClose()をオーバーライドする
この関数でも終了処理を行うことができる。デフォルトではCWnd::DestroyWindow()を呼び出している。
CWinApp::ExitInstance()をオーバーライドする
アプリケーションクラスのこの関数をオーバーライドしてもよい。
また、独自に終了方法を用意するには、親ウィンドウに対しWM_CLOSEメッセージを送る。
void CMyView::OnButton1()
{
	AfxGetMainWnd()->PostMessage(WM_CLOSE);
}

目次へ