プログラムの起動と終了

最終更新日時:2010-10-19 21:09

初版公開日時:2010-10-19 21:09

タグ: wxwidgets

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;
}

関連記事

auther: dictoss

地元の北海道から流れて大阪へ行き、現在は東京でお仕事中。 仕事ではCentOS、家ではDebianとFreeBSDを使い何かしようと画策中。

github.com