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;
}
地元の北海道から流れて大阪へ行き、現在は東京でお仕事中。仕事ではRHEL互換OS、家ではDebianを使い何かしようと画策中。投稿は個人の見解であり所属する組織の公式見解ではありません。