BREW HelloWorld アプリ 〜 SophiaFramework UNIVERSE の使い方 〜
ソースコード解説 : GUI フレームワークを使用しない SFC アプリ
はじめに
SFCApplication を継承して、GUI フレームワークを使わないアプリ ( SFC アプリ ) を開発することも可能です。
SFC アプリは BREW 標準の C プログラムと同じ構造なので、BREW 標準アプリの開発で SophiaFramework UNIVERSE の C++ クラスライブラリを利用できます。
HelloWorld アプリ ( SFCApplication アプリ ) のソースコード : 
SophiaFramework AppWizard
![]() |
SophiaFramework AppWizard の 「GUI フレームワークを使用するかどうか」のダイアログで「いいえ」 を選びます。 ( SFC アプリの場合 ) |
|---|---|
![]() |
新規プロジェクト情報 のウィンドウに、プロジェクトのスケルトンに関する情報が表示されます。 |
アプリの起動
SFC アプリでも、SFCApplet::Boot() 関数と Factory() 関数を実装する必要があります。
それぞれの関数の実装は、HelloWorld アプリ ( GUI フレームワークを使うSFR アプリ ) と同様です。
// Boot loader
SFCApplet::FactorySPP SFCApplet::Boot(AEECLSID id, SFXAnsiStringPtr license)
{
*license = "heap://"
"TIXDRQXNU5WHU8Y3Z9WOHWQR6Z3VPSDHDV"
"5CR1S4XASPWLUHWAS7Z5Z2TGS3XMSAT3UP"
"UQTLTARCYPSFUEJZ6ROSJWGUQSEYKR6V2U"
"4VESMTQLHKZ6X7Y2VKXHWIX3XBU0Z7VHWH"
"XIZBSGT5SPU3XLX0Z1Y4R3TCU6WGT9WHWI"
"VNYHYCUCR9T3SMTEWPRNVAX1Y4VPW2YCY9"
"YQV5R7Z9UIVHT6SDUPU2SIW6VCRCWBR2S4"
"WQUPYFWCYGT4VIT1WHXGYPTQSFYPWNV3UL"
"RNWFW7RBRFVKUKS2YQSQYHW1TPUPXBZ6UE"
"Y2WOYKR7S3TAU4TQS6UHVFVEVLU3R5SDSK"
"W7RPTNTPVQU2T4R8Z4VLUGEW3U98TLDR8/";
return (id==AEECLSID_HELLOWORLD) ? (&HelloWorld::Factory) : (null);
}
// Factory function
SFCInvokerPtr HelloWorld::Factory(Void)
{
return ::new HelloWorld;
}
アプリクラスの定義
GUI フレームワークを使用しない SFC アプリでは、アプリクラスは SFCApplication クラスを継承します。(※)
SFCApplication アプリでは、ハンドラ関数の宣言に HANDLER_DECLAREを使いません。例えば、キーハンドラ OnKey()は、通常の関数と同じように宣言します。
// HelloWorld.hpp
//
//
#ifndef __HELLOWORLD_HPP
#define __HELLOWORLD_HPP
#include <SophiaFramework.hpp>
#include "HelloWorld.bid"
SFMTYPEDEFCLASS(HelloWorld)
class HelloWorld : public SFCApplication {
SFMSEALCOPY(HelloWorld)
public:
static SFCInvokerPtr Factory(Void);
private:
explicit HelloWorld(Void) static_throws;
virtual ~HelloWorld(Void);
virtual Bool Invoke(SFXEventConstRef event);
Bool OnKey(UInt16 key);
};
#endif // __HELLOWORLD_HPP //
※ GUI フレームワークを使う SFR アプリでは、SFRApplication クラスを継承します。
SophiaFramework UNIVERSE リファレンス : SFRApplication / SFCApplication
イベントハンドラ
Invoke()は SFCApplication アプリのイベントハンドラです。Invoke() は、受信したイベントに対応するハンドラ関数を呼び出します。
イベントはInvoke 関数の引数として渡され、イベントの type に応じて、ハンドラ関数が呼び出されます。キーイベントの場合、キーハンドラ OnKey() が呼び出されます。
イベントハンドラ Invoke()
以下のイベントハンドラ Invoke() は SophiaFramework AppWizard が自動生成するコードです。
// イベント ハンドラ
Bool HelloWorld::Invoke(SFXEventConstRef event)
{
Bool result(false);
switch (event.GetType()) {
case SFEVT_KEY:
result = OnKey(event.GetP16());
break;
}
if (!result) {
result = SFCApplication::Invoke(event);
}
return result;
}
キーハンドラ OnKey()
以下のキーハンドラ OnKey() は SophiaFramework AppWizard が自動生成するコードです。
// キーハンドラ
Bool HelloWorld::OnKey(UInt16 key)
{
// キーが押された場合の処理
switch (key) {
case AVK_SELECT: // 選択キーが押された場合
Terminate(); // アプリを終了
return true;
}
return false;
}
コンストラクタ
SFCApplication アプリではイベントハンドラを独自に実装するので、コンストラクタではハンドラ関数を登録しません。
// コンストラクタ
HelloWorld::HelloWorld(Void) static_throws
{
return;
}
カスタマイズ前
![]() |
画面には何も表示されません。「選択」キーが押された時、アプリは終了します。 |
|---|
カスタマイズ
画面を描画するコード
SFCApplication アプリでは、キーハンドラの中から画面を描画する Draw() 関数を呼び出します。
また、画面を更新するコード "graphics->Update();" は必ず記述する必要があります。
Void Draw(Void)
{
// SFXGraphics インスタンスを生成
SFXGraphicsPtr graphics = SFXGraphics::GetInstance();
// 画面をクリア
// SFXGraphics::GetDeviceRectangle() で画面全体の長方形を取得
// SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00) は白色を表す
graphics->FillRectangle(SFXGraphics::GetDeviceRectangle(),
SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00));
// 文字列 "Hello World" を描画
// SFXRGBColor(0x00, 0x00, 0x00, 0x00) は黒色を表す
graphics->DrawText("Hello World", SFXGraphics::GetDeviceRectangle(),
SFXRGBColor(0x00, 0x00, 0x00, 0x00));
// 画面を更新 ( 必須 )
graphics->Update();
}
「1」キーが押された場合、Draw() 関数が呼ばれるようにキー ハンドラをカスタマイズします。
// キー ハンドラ
Bool HelloWorld::OnKey(UInt16 key)
{
// キーが押された場合の処理
switch (key) {
case AVK_SELECT: // 選択キーが押された場合
Terminate(); // アプリを終了
return true;
case AVK_1: // 「1」キーが押された場合
Draw(); // Draw() 関数を呼ぶ
return true;
}
return false;
}
カスタマイズ後
![]() |
「1」キーが押されると、画面はクリアされ「 Hello World」が描画されます。 |
|---|























