![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1 |
セレクト キーが押されると自動的に終了するように拡張した Hello World アプリを例にして、アプリの起動から終了までの全般的な流れを解説します。
例 8.8. セレクトキーで終了する Hello World アプリ : .hpp ファイル ( クラスの定義 )
// // HelloWorld.hpp // // This source code was automatically // generated by SophiaFramework 4.1. // #ifndef __HELLOWORLD_HPP #define __HELLOWORLD_HPP #include <SophiaFramework.hpp> #include "HelloWorld.bid" SFMTYPEDEFCLASS(HelloWorld) class HelloWorld : public SFRApplication { SFMSEALCOPY(HelloWorld) public: static SFCInvokerPtr Factory(Void); private: HelloWorld(Void) static_throws; virtual ~HelloWorld(Void); HANDLER_DECLARE_VOIDRENDER(OnRenderContent) HANDLER_DECLARE_BOOLEVENT(OnKey) }; #endif // __HELLOWORLD_HPP //
例 8.9. セレクトキーで終了する Hello World アプリ : .cpp ファイル ( ブート ローダとファクトリ関数の実装、ハンドラの実装と登録 )
// // HelloWorld.cpp // // This source code was automatically // generated by SophiaFramework 4.1. // #include "HelloWorld.hpp" // ブート ローダ SFCApplet::FactorySPP SFCApplet::Boot(AEECLSID id, SFXAnsiStringPtr license) { *license = "heap://"; return (id == AEECLSID_HELLOWORLD) ? (&HelloWorld::Factory) : (null); } // ファクトリ関数 SFCInvokerPtr HelloWorld::Factory(Void) { return ::new HelloWorld; } // コンストラクタ HelloWorld::HelloWorld(Void) static_throws { if (static_try()) { static_throw(RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT, HANDLER_BEFORE, HANDLER_FUNCTION(OnRenderContent))); } if (static_try()) { static_throw(RegisterHandler(SFEVT_KEY, HANDLER_AFTER, HANDLER_FUNCTION(OnKey))); } return; } // デストラクタ HelloWorld::~HelloWorld(Void) { return; } // 描画ハンドラ HANDLER_IMPLEMENT_VOIDRENDER(HelloWorld, OnRenderContent, graphics) { // 文字列 "Hello World" を画面に描画する graphics->DrawText("Hello World", GetContentWorld()); return; } // キーハンドラ HANDLER_IMPLEMENT_BOOLEVENT(HelloWorld, OnKey, event) { // キーイベントの処理 switch (event.GetP16()) { case AVK_SELECT: // セレクトキーが押されとき Terminate(); // アプリを終了する return true; } return false; }
最初の HelloWorld アプリから拡張した部分は、キー ハンドラの宣言、実装、登録です。
キーハンドラの宣言、実装、登録は、それぞれ HANDLER_DECLARE_BOOLEVENT 関数、HANDLER_IMPLEMENT_BOOLEVENT 関数、RegisterHandler 関数を使用します。 イベント ハンドラはコンストラクタで登録します。
アプリが起動されると、ブートローダ、ファクトリ関数、アプリのコンストラクタの順に実行されます。
アプリのインスタンスが作成されると、BREW からアプリに対して SFEVT_APP_START イベントが通知されます。上記コードでは SFEVT_APP_START イベントのハンドラを登録していないので、 SFRApplication クラスの ( 何も実行しない ) デフォルトハンドラが実行され、アプリの起動処理は完了します。
アプリはイベント待ちの状態となり、ユーザーからのキー入力やネットワークからのイベントなどに応じた処理が可能となります。
上記コードでは SFEVT_KEY イベントに対するハンドラを宣言、登録、実装しています。キーが押されると、キー ハンドラが呼び出されます。 キー ハンドラでは押されたキーの種類を判定し、セレクトキーが押された場合は Terminate 関数を呼び出してアプリを終了します。
アプリが終了プロセスに入ると、BREW から SFEVT_APP_STOP イベントが通知されます。上記のサンプルコードでは SFEVT_APP_STOP イベントのハンドラは登録されていませんので、 SFRApplicationクラスの ( 何も実行しない ) デフォルトハンドラが実行されます。
そして、アプリ クラスのデストラクタが呼び出され、アプリクラスのインスタンスが破棄されます。 最後にSophiaFramework 内部で終了処理をした後、アプリは終了処理は完了します。 アプリ クラスのインスタンスが破棄されるとき、ウィンドウやコントロールなど UI コンポーネント ( レスポンダ ) も自動的に破棄されます。( UI コンポーネントの明示的な破棄は不要です )
|
Copyright (C) 2002 - 2008 Sophia Cradle, Inc. All Rights Reserved. |
![]() ![]() ![]()
|