2010-10-20 21:10
wxWidgetsのプログラムはライブラリ内の定義しているmain()が起動され、プログラマが自身で記述する処理で最初に実行される関数は、wxAppクラスを派生したユーザー定義クラスでオーバーライトしたOnInit()です。
OnInit()では最低トップレベルウィンドウを作成し、フレームワークへそのトップレベルウィンドウのインスタンスをwxAppBase::SetTopWindow()(wxAppBaseクラスはwxBaseクラスの基底クラス)を実行してトップレベルウィンドウを指定する必要があります。
また、プログラムの終了はOnInit()関数のSetTopWindow()で指定したウィンドウがクローズした時点で、wxAppクラスを派生したユーザー定義クラスでオーバーライドしたOnExit()が実行され、その後フレームワークの終了処理を行いプロセスが終了します。
そのため、プログラムの起動処理OnInit()、終了処理OnExit()をそれぞれオーバーライド定義する必要になります。
// フレームワークへwxBomCheckerFrmAppクラスがwxAppの代わりをすることを定義します。 IMPLEMENT_APP(wxBomCheckerFrmApp) class wxBomCheckerFrmApp : public wxApp { public: bool OnInit(); int OnExit(); }; bool wxBomCheckerFrmApp::OnInit() { /* * アプリケーション独自の初期化処理を行います。 */ // トップレベルウィンドウとするwxFrameクラスの派生クラスを生成。 wxBomCheckerFrm* frame = new wxBomCheckerFrm(NULL); //ウィンドウをトップレベルウィンドウに指定します。 //このウィンドウを閉じるとOnExit()の処理を実行します。 SetTopWindow(frame); //ウィンドウを表示します。 frame->Show(); // ウィンドウ処理へ移ります。 // falseを返すとプログラムはすぐに終了します。 return true; } int wxBomCheckerFrmApp::OnExit() { /* * アプリケーション独自の終了処理を行います。 */ // ver2.8ではこの戻り値はライブラリ側で無視されますので // 好きな値でどうぞ。 return 0; }