![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0 |
ルート(SFZRoot)は、複数のレスポンダの木構造からなるレスポンダツリーの頂点に配置されるように設計されたレスポンダです。
SFYDistributer クラスや SFYRenderer クラスと協調し、 レスポンダツリーを構成する機能を提供します。
通常、1つのアプレットには1つのルートが含まれますが、 明示的に新しいレスポンダツリーを構築することで複数のルートを含むこともできます。
SFYApplication クラスを継承してアプレットを作成する場合、 SFYApplication クラスがデフォルトのルートを1つ保持します。
![]() |
重要 |
|---|---|
|
すべてのルートにおいて、SFYResponder::SetDistributer 関数、SFYResponder::SetRenderer 関数、SFYResponder::SetState 関数、SFYResponder::SetRealBound 関数の呼び出しは必須です。 その他の関数は必要に応じて呼び出します。省略することも可能です。 | |
SFZRoot クラスは、 各種ウィンドウ、ダイアログやメニューを配置するための汎用的なルートとして機能します。
SFYApplication クラスを継承してアプレットを作成する場合、 SFYApplication クラスがデフォルトのルートを保持しているため、 明示的にルートを作成して操作する必要はありません。
SFCApplication クラスを継承してアプレットを作成する場合や 複数のレスポンダツリーを扱いたい場合は明示的にルートを操作する必要があります。
例 9.37. 宣言
SFMTYPEDEFCLASS(USRApplication)
class USRApplication : public SFCApplication {
SFMSEALCOPY(USRApplication)
private:
SFYDistributer _distributer;
SFYRenderer _renderer;
SFZRootSmp _root;
...
private:
SFCError Make(Void);
Bool Do(SFXEventConstRef event);
Void Dispose(Void);
};
例 9.38. 実装 1
SFCError USRApplication::Make(Void)
{
SFCError error(SFERR_NO_ERROR);
// 配信エンジンを作成する
error = _distributer.Initialize();
if (error == SFERR_NO_ERROR) {
// 描画エンジンを作成する
// 引数 : レスポンダ空間(ここでは携帯電話の画面全体を指定している)
error = _renderer.Initialize(SFXGraphics::GetDeviceRectangle());
if (error == SFERR_NO_ERROR) {
// ルートを作成する
if ((_root = SFZRoot::NewInstance(&error)) != null) {
// ルートに配信エンジンを登録する
_root->SetDistributer(&_distributer);
// ルートに描画エンジンを登録する
_root->SetRenderer(&_renderer);
// レスポンダ空間上にルートの実領域を設定する
_root->SetRealBound(_root->GetSuitableBound());
// ルートの状態を「可視+活性+操作可能+フォーカス」にまとめて設定する
_root->SetState(true, true, true, true);
}
}
}
return error;
}
Bool USRApplication::Do(SFXEventConstRef event)
{
SFCError error;
Bool result(false);
// レスポンダツリーにイベントを配信する
error = _root->Distribute(event, &result);
if (error == SFERR_NO_ERROR) {
if (result) {
if (IsRenderable()) {
// レスポンダツリーを描画する
error = _root->Render();
}
}
}
if (error != SFERR_NO_ERROR) {
// イベント配信の失敗や描画の失敗など、
// 致命的なエラーが発生したときの処理を記述する
}
return result;
}
Void USRApplication::Dispose(Void)
{
// レスポンダツリー、描画エンジン、配信エンジンの順で終了処理を行い、リソースを解放する
_root.Release();
_renderer.Terminate();
_distributer.Terminate();
return;
}
![]() |
レスポンダ空間 |
|---|---|
|
レスポンダ空間とは、 描画エンジンに関連付けられたレスポンダツリーを描画する画面上の矩形領域のことです。 SFYRenderer::Initialize 関数を利用して描画エンジンを初期化するときに設定します。 多くの場合、レスポンダ空間として画面の全領域を設定します。 | |
大抵の場合は、上のコード例に出てくる USRApplication::Make 関数、USRApplication::Do 関数、USRApplication::Dispose 関数は、 それぞれ下記のコンストラクタ、イベントハンドラ、デストラクタから呼び出します。あるいは同等の記述を行います。
例 9.39. 実装 2
// コンストラクタ USRApplication::USRApplication(Void) { if (static_try()) { static_throw(Make()); // その他の処理を記述する } } // イベントハンドラ Bool USRApplication::HandleEvent(SFXEventConstRef event) { SFCError error; Bool result(false); result = Do(event); // その他の処理を記述する return result; } // デストラクタ USRApplication::~USRApplication(Void) { Dispose(); // その他の処理を記述する }
|
Copyright (C) 2002 - 2008 Sophia Cradle Incorporated All Rights Reserved. |
![]() ![]() ![]()
|