前のページ次のページ上に戻るホーム SophiaFramework 2.0

9.4. 起動から終了まで

ここでは、アプレットの起動から終了までを解説します。

ここまでの解説でアプレットの作成方法や起動の実体は理解してもらえたと思います。 では、アプレットを起動して終了するまでを見ていきましょう。次に示す サンプル コードはセレクト キーが押されると終了するアプレットのコードです。


#include <SophiaFramework.hpp>



SFMTYPEDEFCLASS(QWKDemo)

class QWKDemo : public SFRApplication {

  public:

    static inline SFCInvokerPtr Constructor(Void)

    {

      return(new QWKDemo());

    }

    

  private:

    inline QWKDemo(Void)

    {

      RegisterHandler(SFEVT_KEY,AVK_SELECT,HANDLER_AFTER,Key_static,this);

      return;

    }

    

    virtual inline ~QWKDemo(Void)

    {

      return;

    }

    

    static inline Bool Key_static(ConstSFUEventRef /*e*/,VoidPtr r)

    {

      QWKDemoPtr(r)->Key_handler();

      return(TRUE);

    }

    

    inline Void Key_handler(Void)

    {

      SFBShell::Instance()->CloseApplet(FALSE);

      return;

    }

};



SFCInvokerSPP SFCApplet::Boot(AEECLSID id)

{

  return((id == AEECLSID_QWKDEMO) ? QWKDemo::Constructor : NULL);

}

このサンプルは Hello brew world. を表示するサンプルとほとんど 同じです。違う点は描画ハンドラを登録するのではなく、キー ハンドラを 登録しているところです。注目点は Hello brew world. の時と同じように キー ハンドラである Key_handler 関数とヘルパー関数である Key_static そしてハンドラを登録するコードとなります。

では、アプレットの起動から順に解説していきます。まず、アプレットが 起動されると QWKDemo アプリケーションが作成されます。QWKDemo アプリケーション のコンストラクタではキー ハンドラが登録されます。ここまでの処理は アプレットが起動してから EVT_APP_START イベントがやってくるまでの 間で行われます。

起動が完了すると次に、EVT_APP_START がやってきますがこのサンプルでは ハンドラを登録していないので SFRApplication クラスのデフォルトのハンドラが 実行されます。このハンドラは実際は何も行いません。

次に、アプレットはユーザの操作待ちもしくは他のイベントがやってくるのを 待つ状態になります。ユーザからキー入力が有った場合、EVT_KEY がやってきます。 イベント タイプが EVT_KEY で第一パラメータが AVK_SELECT の場合、 登録したキー ハンドラに処理がやってきます。キー ハンドラ内では、SFBShell クラスの CloseApplet() を呼び出してアプレットの終了を BREW 側に伝えています。

CloseApplet() を実行したので、アプレットは終了段階に入り、 EVT_APP_STOP イベントがやってきます。このサンプルでは、EVT_APP_START と同様 ハンドラを登録していないので SFRApplication クラスのデフォルトの ハンドラが実行されます。このハンドラは実際は何も行いません。

最後にアプレットが破棄されます。アプレットが破棄される前に QWKDemo アプリケーションのデストラクタが起動され、残っているすべての UI コンポーネント を自動削除して終了します。