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

9.4. 起動から終了まで

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

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

#include <SophiaFramework.hpp>

SFMTYPEDEFCLASS(QuitDemo)
class QuitDemo : public SFRApplication {
  public:
    static inline SFCInvokerPtr Constructor(Void)
    {
      return(new QuitDemo());
    }
    
  private:
    inline QuitDemo(Void)
    {
      RegisterHandler(SFEVT_KEY, AVK_SELECT, HANDLER_AFTER, Key_static, this);
      return;
    }
    
    virtual inline ~QuitDemo(Void)
    {
      return;
    }
    
    static inline Bool Key_static(ConstSFUEventRef /*event*/, VoidPtr responder)
    {
      QuitDemoPtr(responder)->Key_handler();
      return(TRUE);
    }
    
    inline Void Key_handler(Void)
    {
      SFBShell::Instance()->CloseApplet(FALSE);
      return;
    }
};

SFCInvokerSPP SFCApplet::Boot(AEECLSID id)
{
  return((id == AEECLSID_QUITDEMO) ? QuitDemo::Constructor : NULL);
}

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

まず、アプレットが起動されると QuitDemo アプリケーションが作成されます。 QuitDemo アプリケーションのコンストラクタではキー ハンドラが登録されます。 ここまでの処理はアプレットが起動してから EVT_APP_START イベントを 受け取るまでの間に行われます。

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

次に、アプレットはイベント待ちの状態になります。ユーザーからキー入力が あった場合、EVT_KEY イベントを受け取ります。イベント タイプが EVT_KEY で 第一パラメータが AVK_SELECT の場合、登録したキー ハンドラが起動されます。 SFBShell クラスの CloseApplet() を呼び出すことで、アプレットを終了するように BREW シェルに要求しています。

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

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