![]() ![]() ![]()
|
SophiaFramework 2.1 |
ここでは SophiaFramework を使用したアプレットの作成方法を解説します。
SophiaFramework を用いてアプレットを作る場合、最低限必要なコードは 以下のようになります。
#include <SophiaFramework.hpp>
SFMTYPEDEFCLASS(Demo)
class Demo : public SFRApplication {
public:
static inline SFCInvokerPtr Constructor(Void)
{
return(new Demo());
}
private:
inline Demo(Void)
{
return;
}
virtual inline ~Demo(Void)
{
return;
}
};
SFCInvokerSPP SFCApplet::Boot(AEECLSID id)
{
return((id == AEECLSID_DEMO) ? Demo::Constructor : NULL);
}
上記のサンプル コードは起動するだけで実際は何も行わない アプレットです。Demo クラス は SFRApplication を継承したクラスで SophiaFramework を使用したアプレットを作成する上でのアプレットの 根幹になります。 SFCApple::Boot 関数はアプレットのブート ローダで Demo クラスを生成するために必要なコードです。 詳しくは起動の詳細を参照してください。 SFMTYPEDEFCLASS マクロについては、SFMTYPEDEFCLASS を参照してください。 では、実際に Hello Brew world. と表示する アプレットを作成してみましょう。
#include <SophiaFramework.hpp>
SFMTYPEDEFCLASS(HelloBrew)
class HelloBrew : public SFRApplication {
public:
static inline SFCInvokerPtr Constructor(Void)
{
return(new HelloBrew());
}
private:
inline HelloBrew(Void)
{
RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT, HANDLER_BEFORE, Update_static, this);
return;
}
virtual inline ~HelloBrew(Void)
{
return;
}
static inline Bool Update_static(ConstSFUEventRef event, VoidPtr responder)
{
HelloBrewPtr(responder)->Update_handler(SFUGraphicsPtr(event.P32()));
return(TRUE);
}
inline Void Update_handler(SFUGraphicsPtr graphic)
{
SFRApplication::ContentHandler(graphic);
graphic->SetColor(SFUColor(0x00, 0x00, 0x00));
graphic->DrawString("Hello Brew world.", GetContentWorld());
return;
}
};
SFCInvokerSPP SFCApplet::Boot(AEECLSID id)
{
return((id == AEECLSID_HELLOBREW) ? HelloBrew::Constructor : NULL);
}
拡張された部分を解説します。まず、Hello Brew world. を描くための 描画ハンドラである Update_handler が追加されました。またハンドラを 登録するためのヘルパー関数である Update_static も追加されました。 さらに、コンストラクタ内で描画ハンドラを登録するために RegisterHandler を 呼び出すようになりました。
以上のような修正を加えることで Hello Brew world. を描くアプリを 作成できました。実際にコンパイルして起動するためには、この他に BREW 標準アプレットでも必要な MIF ファイルやクラス ID の生成などを 行わなければなりませんが、詳細は SophiaFramework のチュートリアルや BREW SDK のリファレンスを参照してください。
では、拡張された関数の詳細を解説します。Update_handler は描画ハンドラであり 内部ではまず SFRApplication::ContentHandler() を呼んでいます。この関数は SFRApplication クラスに存在するデフォルトの描画ハンドラです。 ユーザーが描画ハンドラを上書きしたためにデフォルトの描画ハンドラを明示的に 呼び出しています。SFRApplication クラスの描画ハンドラは画面を 真っ白に塗りつぶしてクリアするという動作をします。次に、graphic->SetColor() を呼び出すことで描画色をセットしています。色は SFUColor というユーティリティ クラスのオブジェクトを渡します。 この例では黒色にセットしています。最後に、graphic->DrawString() を呼び出して文字を描いています。 DrawString 関数は文字列と描画矩形を引数に取り、 描画矩形内に収まるように自動的に改行しながら文字列を描画する関数です。
Update_static 関数は描画ハンドラである Update_handler を登録するための ヘルパー関数です。ハンドラを登録するときは静的関数しか登録できないために 上記のようなヘルパー関数を用いています。ハンドラの実際の処理を静的関数の中で 行う場合は直接ハンドラを登録しても問題ありません。
| Copyright(C) 2003 Sophia Cradle Inc., All Rights Reserved. |
![]() ![]() ![]()
|