SophiaFramework UNIVERSE 5.3 |
#include <SFYResponder.h.hpp>
class SFYResponder : protected static_exception< SFCError >;
SFMTYPEDEFRESPONDER(SFYResponder)
■ 仕様と使い方
レスポンダシステムとは、 イベントの分岐処理や画面の描画処理を自動的に行う GUI フレームワークのことです。 開発者はレスポンダと呼ぶ GUI コンポーネントを作成して画面上に配置するだけです。
SFYResponder クラスは、 SFY レスポンダシステムの核となるクラスであり、 SFY レスポンダシステムは SFYResponder クラスと、 このクラスを継承するクラス群から構成されます。
下記の複雑な処理やプログラミングが不要になるので、 アプリ開発・保守の生産性は著しく向上します。
■主な機能
レスポンダのクラス間には下記の継承関係と所有関係があります。
注意 | |
---|---|
ダイアログとメニューはウィンドウと同一階層に存在します。 また、コンテナだけは特殊な設計になっていて、 コントロールや他のコンテナ(コンテナのみ)を管理したり、 逆にコントロールや他のコンテナ(コンテナ・ウィンドウ・ダイアログ)に管理されることも可能です。 |
フレーム | |||||
---|---|---|---|---|---|
ウィンドウ、メニュー、ダイアログなどのレスポンダに、 タイトルや枠線を持つフレームを装着することが可能です。
|
SFYResponder クラスはユーザー定義レスポンダを実装するときの最初の起点(基底クラス)となります。 このクラスには各種レスポンダに共通する要素や機能が実装されています。
ユーザー定義レスポンダを作成するときに最低限必要なコードを示します。
例 890. 宣言
SFMTYPEDEFRESPONDER(USRResponder) class USRResponder: public SFYResponder { SFMSEALRESPONDER(USRResponder) SFMRESPONDERINSTANTIATEONE(USRResponder, SFYResponder) public: // レスポンダのタイプを定義する // 小文字と記号のみからなるタイプは予約されているので使えない enum CodeEnum { CODE_TYPE = four_char_code('U', 'R', 'S', 'P') }; SFMTYPEDEFTYPE(CodeEnum) public: static USRResponderSmp NewInstance(SFCErrorPtr exception = null); protected: explicit USRResponder(Void) static_throws; virtual ~USRResponder(Void); };
例 891. 実装
// コンストラクタ USRResponder::USRResponder(Void) static_throws { if (static_try()) { // レスポンダのタイプを設定する SetType(CODE_TYPE); // 初期化処理を記述する } } // デストラクタ USRResponder::~USRResponder(Void) { // 終了処理を記述する } // スマートポインタで管理されるインスタンスを生成する関数 USRResponderSmp USRResponder::NewInstance(SFCErrorPtr exception) { return static_pointer_cast<USRResponder>(Factory(::new USRResponder, exception)); }
コンストラクタやデストラクタ内の return 文 | |
---|---|
C++ ではコンストラクタやデストラクタでは return 文を記述しません。 GCC を使う場合、コンストラクタやデストラクタ内で return 文を記述すると、 特定の継承関係になっているときにコンパイラがフリーズするバグが確認されています。 |
レスポンダ(基礎編) | SFY GUI フレームワーク を使う開発 | SFY レスポンダシステム | ウィンドウ | ダイアログ | メニュー | コントロール | フレーム | BREW イベント
コンストラクタ/デストラクタ |
---|
SFYResponder( Void ) SFYResponder クラスのコンストラクタです。
|
~SFYResponder( Void ) SFYResponder クラスのデストラクタです。
|
パブリック関数 | |
---|---|
Void |
ClearHandler( Void ) このレスポンダのハンドラの登録をすべて解除します。
|
Void |
ClearTracer( Void ) このレスポンダのトレーサの配信規則の登録をすべて解除します。
|
SFCError |
Distribute(
SFXEventConstRef event
, BoolPtr result = null
)
指定された配信型イベントを
SFYDistributer インスタンスと、このレスポンダ以下のレスポンダツリーに配信します。
|
SFYResponderSmp |
GetChildBack( Void ) 最背面に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBack(
Bool visible
, Bool active
, Bool enable
, Bool focus
) 最背面に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBack(
UInt32 id
) 最背面に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBack(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) 最背面に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBackward(
SInt32 index
) 背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBackward(
SInt32 index
, Bool visible
, Bool active
, Bool enable
, Bool focus
) 背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBackward(
SInt32 index
, UInt32 id
) 背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildBackward(
SInt32 index
, UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) 背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
|
SInt32 |
GetChildCount( Void ) このレスポンダの子レスポンダの数を取得します。
|
SInt32 |
GetChildCount(
Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダの子レスポンダの数を取得します。
|
SInt32 |
GetChildCount(
UInt32 id
) このレスポンダの子レスポンダの数を取得します。
|
SInt32 |
GetChildCount(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダの子レスポンダの数を取得します。
|
SFYResponderSmp |
GetChildForward(
SInt32 index
) 前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildForward(
SInt32 index
, Bool visible
, Bool active
, Bool enable
, Bool focus
) 前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildForward(
SInt32 index
, UInt32 id
) 前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildForward(
SInt32 index
, UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) 前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildFront( Void ) 最前面に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildFront(
Bool visible
, Bool active
, Bool enable
, Bool focus
) 最前面に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildFront(
UInt32 id
) 最前面に位置するこのレスポンダの子レスポンダを取得します。
|
SFYResponderSmp |
GetChildFront(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) 最前面に位置するこのレスポンダの子レスポンダを取得します。
|
SFYDistributerPtr |
GetDistributer( Void ) このレスポンダに設定されている配信エンジンを取得します。
|
SFYResponderSmp |
GetFrame( Void ) このレスポンダに装着されたフレームを取得します。
|
SFXRectangle |
GetGlobalBound( Void ) このレスポンダのグローバル領域を取得します。
|
UInt32 |
GetID( Void ) このレスポンダの ID を取得します。
|
SFXRectangle |
GetLocalBound( Void ) このレスポンダのローカル領域を取得します。
|
SInt32 |
GetNthBackward( Void ) このレスポンダが背面から数えて何番目に位置するかを取得します。
|
SInt32 |
GetNthBackward(
Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダが背面から数えて何番目に位置するかを取得します。
|
SInt32 |
GetNthBackward(
UInt32 id
) このレスポンダが背面から数えて何番目に位置するかを取得します。
|
SInt32 |
GetNthBackward(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダが背面から数えて何番目に位置するかを取得します。
|
SInt32 |
GetNthForward( Void ) このレスポンダが前面から数えて何番目に位置するかを取得します。
|
SInt32 |
GetNthForward(
Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダが前面から数えて何番目に位置するかを取得します。
|
SInt32 |
GetNthForward(
UInt32 id
) このレスポンダが前面から数えて何番目に位置するかを取得します。
|
SInt32 |
GetNthForward(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダが前面から数えて何番目に位置するかを取得します。
|
SFYResponderSmp |
GetParent( Void ) このレスポンダの親レスポンダを取得します。
|
Bool |
GetPropertyTransparent( Void ) このレスポンダの透過属性を取得します。
|
SFXRectangleConstRef |
GetRealBound( Void ) このレスポンダの実領域を取得します。
|
VoidPtr |
GetReference( Void ) このレスポンダのリファレンス値を取得します。
|
SFYRendererPtr |
GetRenderer( Void ) このレスポンダに設定されている描画エンジンを取得します。
|
SFYResponderSmp |
GetRoot( Void ) このレスポンダが所属するレスポンダツリーのルートレスポンダを取得します。
|
Bool |
GetStateActive(
Bool inherit = false
) このレスポンダの活性状態を取得します。
|
Bool |
GetStateEnable(
Bool inherit = false
) このレスポンダの操作可能状態を取得します。
|
Bool |
GetStateFocus(
Bool inherit = false
) このレスポンダのフォーカス状態を取得します。
|
Bool |
GetStateValid(
Bool inherit = false
) このレスポンダの有効状態を取得します。
|
Bool |
GetStateVisible(
Bool inherit = false
) このレスポンダの可視状態を取得します。
|
SFXRectangle |
GetSuitableBound( Void ) このレスポンダの最適な領域(サイズ)を取得します。
|
SFXRectangle |
GetSuitableBound(
SFXRectangleConstRef rectangle
) このレスポンダの最適な領域(サイズ)を取得します。
|
SFXRectangle |
GetSuitableBound(
SFXRectangleConstRef param
, HorizontalEnum horizontal
, VerticalEnum vertical
) このレスポンダの最適な領域(サイズ)を取得します。
|
SFXMargin |
GetSuitableMargin( Void ) このレスポンダのフレーム余白領域を取得します。
|
SFCType |
GetType( Void ) このレスポンダのタイプを取得します。
|
SFXRectangleConstRef |
GetVirtualBound( Void ) このレスポンダの仮想領域を取得します。
|
Bool |
HasFrame( Void ) このレスポンダがコンテントレスポンダであるかどうかを判定します。
|
Void |
Initialize( Void ) このレスポンダを初期化します。
|
Void |
Invalidate( Void ) 指定された領域を再描画領域に登録します。
|
Void |
Invalidate(
SFXRectangleConstRef param
) 指定された領域を再描画領域に登録します。
|
Void |
InvokeBackward(
SFXEventConstRef event
, Bool overload
, BoolPtr result = null
)
指定されたコールバック型イベントをこのレスポンダに送信します
(ハンドラは登録順に起動されます)。
|
Void |
InvokeForward(
SFXEventConstRef event
, Bool overload
, BoolPtr result = null
)
指定されたコールバック型イベントをこのレスポンダに送信します
(ハンドラは登録の逆順に起動されます)。
|
Bool |
IsBack( Void ) このレスポンダが最背面に位置するかどうかを判定します。
|
Bool |
IsBack(
Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダが最背面に位置するかどうかを判定します。
|
Bool |
IsBack(
UInt32 id
) このレスポンダが最背面に位置するかどうかを判定します。
|
Bool |
IsBack(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダが最背面に位置するかどうかを判定します。
|
Bool |
IsFrame( Void ) このレスポンダがアタッチメントフレームであるかどうかを判定します。
|
Bool |
IsFront( Void ) このレスポンダが最前面に位置するかどうかを判定します。
|
Bool |
IsFront(
Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダが最前面に位置するかどうかを判定します。
|
Bool |
IsFront(
UInt32 id
) このレスポンダが最前面に位置するかどうかを判定します。
|
Bool |
IsFront(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダが最前面に位置するかどうかを判定します。
|
Bool |
IsNthBackward(
SInt32 index
) このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
|
Bool |
IsNthBackward(
SInt32 index
, Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
|
Bool |
IsNthBackward(
SInt32 index
, UInt32 id
) このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
|
Bool |
IsNthBackward(
SInt32 index
, UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
|
Bool |
IsNthForward(
SInt32 index
) このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
|
Bool |
IsNthForward(
SInt32 index
, Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
|
Bool |
IsNthForward(
SInt32 index
, UInt32 id
) このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
|
Bool |
IsNthForward(
SInt32 index
, UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
|
Bool |
IsRoot( Void ) このレスポンダがルートレスポンダであるかどうかを判定します。
|
SFCError |
Recover( Void )
デバイス画面保存用ビットマップを使用してこのレスポンダとレスポンダ空間との交差領域を復元します。
|
SFCError |
RegisterHandler(
SFXEventRangeConstRef range
, SFYHandler::RuleRecConstRef rule
) 指定されたハンドラをこのレスポンダに登録します。
|
SFCError |
RegisterHandler(
SFXEventRangeConstRef range
, SFYHandler::HandlerSPP spp
, VoidPtr reference
) 指定されたハンドラをこのレスポンダに登録します。
|
SFCError |
RegisterHandler(
SFXEventRangeConstPtr range
, SFYHandler::RuleRecConstPtr rule
, SInt32 length
) 指定されたハンドラをこのレスポンダに登録します。
|
SFCError |
RegisterHandler(
SFXEventRangeConstPtr range
, SFYHandler::HandlerSPPConstPtr spp
, VoidPtrConstPtr reference
, SInt32 length
) 指定されたハンドラをこのレスポンダに登録します。
|
SFCError |
RegisterTracer(
SFXEventRangeConstRef range
, SFYTracer::RuleRecConstRef rule
) 指定された配信規則をこのレスポンダのトレーサに登録します。
|
SFCError |
RegisterTracer(
SFXEventRangeConstRef range
, SFYTracer::OrderEnum order
, SFYTracer::StateEnum state
, Bool overload
) 指定された配信規則をこのレスポンダのトレーサに登録します。
|
SFCError |
RegisterTracer(
SFXEventRangeConstPtr range
, SFYTracer::RuleRecConstPtr rule
, SInt32 length
) 指定された配信規則をこのレスポンダのトレーサに登録します。
|
SFCError |
RegisterTracer(
SFXEventRangeConstPtr range
, SFYTracer::OrderEnumConstPtr order
, SFYTracer::StateEnumConstPtr state
, BoolConstPtr overload
, SInt32 length
) 指定された配信規則をこのレスポンダのトレーサに登録します。
|
SFCError |
Render(
Bool force = false
)
このレスポンダ以下のレスポンダツリーをレスポンダ空間に再描画します。
|
Void |
SetDistributer(
SFYDistributerPtr param
) 指定された配信エンジンをこのレスポンダに設定します。
|
SFCError |
SetFrame(
SFYResponderSmpConstRef param
) このレスポンダにフレームを装着します。
|
Void |
SetID(
UInt32 param
) 指定された ID をこのレスポンダに設定します。
|
SFCError |
SetParent(
SFYResponderSmpConstRef param
) 指定されたレスポンダをこのレスポンダの親レスポンダに設定します。
|
Void |
SetProperty(
Bool transparent
) 指定された属性をこのレスポンダに設定します。
|
Void |
SetPropertyTransparent(
Bool param
) 指定された透過属性をこのレスポンダに設定します。
|
Void |
SetRealBound(
SFXRectangleConstRef param
) 指定された領域をこのレスポンダの実領域に設定します。
|
Void |
SetReference(
VoidPtr param
) 指定された値をこのレスポンダのリファレンスに設定します。
|
Void |
SetRenderer(
SFYRendererPtr param
) 指定された描画エンジンをこのレスポンダに設定します。
|
Void |
SetState(
Bool visible
, Bool active
, Bool enable
, Bool focus
) 指定された値をこのレスポンダの可視、活性、操作可能、フォーカスの各状態フラグに設定します。
|
Void |
SetStateActive(
Bool param
) 指定された値をこのレスポンダの活性状態フラグに設定します。
|
Void |
SetStateEnable(
Bool param
) 指定された値をこのレスポンダの操作可能状態フラグに設定します。
|
Void |
SetStateFocus(
Bool param
) 指定された値をこのレスポンダのフォーカス状態フラグに設定します。
|
Void |
SetStateVisible(
Bool param
) 指定された値をこのレスポンダの可視状態フラグに設定します。
|
Void |
SetVirtualBound(
SFXRectangleConstRef param
) 指定された領域をこのレスポンダの仮想領域に設定します。
|
SFCError |
Snapshot(
SFBBitmapSmpConstRef bitmap
) デバイス画面保存用ビットマップからこのレスポンダとレスポンダ空間との交差領域のスナップショットを取得します。
|
Void |
Terminate( Void ) このレスポンダの終了処理を行います。
|
Void |
ToBack( Void ) このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
|
Void |
ToBack(
Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
|
Void |
ToBack(
UInt32 id
) このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
|
Void |
ToBack(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
|
Void |
ToFront( Void ) このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
|
Void |
ToFront(
Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
|
Void |
ToFront(
UInt32 id
) このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
|
Void |
ToFront(
UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
|
Void |
ToNthBackward(
SInt32 index
) このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
|
Void |
ToNthBackward(
SInt32 index
, Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
|
Void |
ToNthBackward(
SInt32 index
, UInt32 id
) このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
|
Void |
ToNthBackward(
SInt32 index
, UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
|
Void |
ToNthForward(
SInt32 index
) このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
|
Void |
ToNthForward(
SInt32 index
, Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
|
Void |
ToNthForward(
SInt32 index
, UInt32 id
) このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
|
Void |
ToNthForward(
SInt32 index
, UInt32 id
, Bool visible
, Bool active
, Bool enable
, Bool focus
) このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
|
Void |
UnregisterHandler(
SFXEventRangeConstRef range
, SFYHandler::RuleRecConstRef rule
) このレスポンダから指定されたハンドラの登録を解除します。
|
Void |
UnregisterHandler(
SFXEventRangeConstRef range
, SFYHandler::HandlerSPP spp
, VoidPtr reference
) このレスポンダから指定されたハンドラの登録を解除します。
|
Void |
UnregisterHandler(
SFXEventRangeConstPtr range
, SFYHandler::RuleRecConstPtr rule
, SInt32 length
) このレスポンダから指定されたハンドラの登録を解除します。
|
Void |
UnregisterHandler(
SFXEventRangeConstPtr range
, SFYHandler::HandlerSPPConstPtr spp
, VoidPtrConstPtr reference
, SInt32 length
) このレスポンダから指定されたハンドラの登録を解除します。
|
Void |
UnregisterTracer(
SFXEventRangeConstRef range
) このレスポンダのトレーサから指定された配信規則の登録を解除します。
|
Void |
UnregisterTracer(
SFXEventRangeConstPtr range
, SInt32 length
) このレスポンダのトレーサから指定された配信規則の登録を解除します。
|
プロテクト関数 | |
---|---|
static SFYResponderSmp |
Factory(
SFYResponderPtr responder
, SFCErrorPtr exception = null
) NewInstance 関数の実装を補助します。
|
SFYResponderSmp |
GetThis( Void ) このレスポンダのスマートポインタを取得します。
|
Void |
SetType(
SFCType param
) 指定された値をこのレスポンダのタイプに設定します。
|
型 |
---|
CodeEnum SFYResponder クラスを表す定数です。
|
HorizontalEnum 水平方向のアライメントを表す定数です。
|
VerticalEnum 垂直方向のアライメントを表す定数です。
|
[ protected, explicit ] SFYResponder(Void);
このコンストラクタは、以下の初期化処理を行います。
Tip | |
---|---|
この関数は例外を搬出する可能性があります。 このクラスを継承するクラスのコンストラクタ内では、始めに例外の判定を行う必要があります。 タイプは必ずコンストラクタ内で設定します。 |
以下は、USRWindow クラスのコンストラクタを記述する方法です。
// コンストラクタ USRWindow::USRWindow(Void) { if (static_try()) { // タイプは必ずこの場所で設定する // このようにすると親クラスのコンストラクト内でエラーが発生した場合は // 親クラスのタイプが保持され、自クラスのコンストラクト内でエラーが // 発生した場合は自クラスのタイプが設定される // その結果、外部からこのクラスを利用する場合にエラーの発生を箇所を特定しやすくなる SetType(four_char_code('U', 'W', 'N', 'D')); // その他の初期化処理を記述する ... } }
このコンストラクタの内部実装は以下の通りです。
/*protected */SFYResponder::SFYResponder(Void) static_throws : _telomere(1), _parent(null), _frame(null) { _flag.property &= ~FLAG_PROPERTY_TRANSPARENT; _flag.state &= ~(FLAG_STATE_VALID | FLAG_STATE_VISIBLE | FLAG_STATE_ACTIVE | FLAG_STATE_ENABLE | FLAG_STATE_FOCUS); _flag.inherit = _flag.state; _flag.context &= ~FLAG_CONTEXT_GUARD; if (static_try()) { _type = CODE_TYPE; _id = 0; _real.Set(SFXRectangle::ZeroInstance()); _virtual.Set(SFXRectangle::ZeroInstance()); _distributer = null; _renderer = null; _reference = null; } SFYDistributer::Initialize(this); SFYRenderer::Initialize(this); }// SFYResponder::SFYResponder //
SFYResponder::SetType | SFYResponder::CodeEnum | SFYResponder::SetState | SFYResponder::SetPropertyTransparent | SFYResponder::SetID | SFYResponder::SetRealBound | SFYResponder::SetVirtualBound | SFXRectangle | SFYDistributer | SFYRenderer | 属性 | 状態 | タイプ | ID | 実領域 | 仮想領域
[ protected, virtual ] virtual ~SFYResponder(Void);
このデストラクタは、何も行いません。
このデストラクタの内部実装は以下の通りです。
/*protected virtual */SFYResponder::~SFYResponder(Void) { }// SFYResponder::~SFYResponder //
[ public ] Void ClearHandler(Void);
この関数は、 このレスポンダのハンドラの登録をすべて解除します。
[ public ] Void ClearTracer(Void);
この関数は、 このレスポンダのトレーサの配信規則の登録をすべて解除します。
[ public ] SFCError Distribute( SFXEventConstRef event // イベント BoolPtr result = null // 処理結果 );
この関数は、 指定された配信型イベントを このレスポンダが所属するレスポンダツリーの ルートレスポンダに設定されている SFYDistributer インスタンスとこのレスポンダ以下の レスポンダツリーに配信します。
イベントは、SFYDistributer インスタンス、このレスポンダ以下のレスポンダツリーの順に、 トレーサに登録された配信規則に基づき配信されます。
注意 | |
---|---|
このレスポンダが所属するレスポンダツリーのルートレスポンダに 配信エンジン (SFYDistributer)が設定されていない場合は、 SFERR_INVALID_STATE が返り、イベント配信は行われません (デフォルトの設定では、配信エンジンは SFYApplication クラスが内部に保持している ルートに設定されています)。 |
注意 | |
---|---|
result 引数に true が返却された場合は、 レスポンダの状態が変化している可能性があるため、 SFYResponder::Render 関数を呼び出して再描画することを推奨します。 |
注意 | |
---|---|
BREW イベントは、 イベント受信時に起動される SFYApplication::HandleEvent 関数から呼び出される SFYResponder::Distribute 関数の処理によりレスポンダに配信されますので、 開発者はこの関数を呼び出す必要はありません。 ユーザーイベントは、 明示的に SFYResponder::Distribute 関数を呼び出して配信する必要があります。 |
注意 | |
---|---|
コールバック型イベントは、 送信先レスポンダの子孫レスポンダに配信されません。 |
イベントの配信について | |
---|---|
SFYResponder::Distribute 関数は、 この関数を呼び出した時点のレスポンダツリー上のレスポンダにイベントを配信します。 イベントループ内で新規に作成されたレスポンダには配信しません。 また、 SFYResponder::Terminate 関数により破棄されたレスポンダにも配信しません。 |
以下は、SFYApplication::HandleEvent 関数の実装における使用例です。
// アプリが BREW 環境からイベントを受信したときに呼び出される関数 /*protected virtual */Bool SFYApplication::HandleEvent(SFXEventConstRef event) { SFCError error; Bool result(false); // 配信エンジンを起動してイベントを配信する // ※ イベントは最初にルートに関連付けられた SFYDistributer インスタンスに配信される // その後、トレーサの配信規則に基づいてルート以下のレスポンダツリーに配信される if ((error = _root->Distribute(event, &result)) == SFERR_NO_ERROR) { // (_root はルート、result 引数にはイベントの処理結果が格納される) if (event.GetType() != SFEVT_APP_STOP && event.GetType() != SFEVT_APP_SUSPEND)) { // 再描画が必要な場合 if (IsRenderable()) { // 優先的イベントハンドラが登録されていない場合 // 描画エンジンを起動してルート以下のレスポンダツリーを再描画する error = _root->Render(); } } } if (error != SFERR_NO_ERROR) { // 配信エンジンや描画エンジンの起動時にメモリ不足などの致命的エラーが発生した場合 if (HandleError(event, error)) { result = true; } } if ((event.GetType() == SFEVT_APP_SUSPEND) && IsRendererIntermissive()) { // サスペンド時に描画エンジン内部のデバイス画面保存用ビットマップを解放する場合 // 描画エンジンを終了する _renderer.Terminate(); } return result; // イベントを処理したときは true を返し, そうでないときは false を返す }// SFYApplication::HandleEvent //
参照: SFCApplication::HandleEvent | SFCApplication::IsRenderable | SFCApplication::HandleError | SFYApplication::IsRendererIntermissive | SFYResponder::Distribute | SFYResponder::Render | SFYRenderer::Initialize | SFYRenderer::Terminate | SFZRoot | ルート | トレーサ | 配信エンジン | 描画エンジン | 描画イベント | 描画ハンドラ | イベントループ | 可視領域 | 再描画領域
SFYResponder::InvokeForward | SFYResponder::InvokeBackward | SFYResponder::Terminate | SFXEvent | SFYDistributer | 配信エンジン | トレーサ | 配信型 | コールバック型 | イベント | BREW イベント | レスポンダイベント | レスポンダツリー | イベントループ | ハンドラ | ルート
[ protected, static ] SFYResponderSmp Factory( SFYResponderPtr responder // インスタンス SFCErrorPtr exception = null // エラー値 );
new 演算子を用いて新しく生成したインスタンスを設定します。
内部で発生したエラー値を返します。
新しい具象レスポンダクラスを作成するときに必要となる NewInstance 関数の実装を補助します。
この関数を使えば、具象レスポンダクラスの NewInstance 関数は簡単に実装できます。
static_pointer_cast 演算子 | |
---|---|
SFYResponder::Factory 関数は SFYResponderSmp 型を返すので、 static_pointer_cast 演算子を使用して新しく生成するレスポンダクラスの型にダウンキャストする必要があります。 |
以下は、USRWindow クラスの NewInstance 関数を実装するコードです。
USRWindowSmp USRWindow::NewInstance(SFCErrorPtr exception) { return static_pointer_cast<USRWindow>(Factory(::new USRWindow, exception)); }
SFYResponder::Factory 関数のデフォルトの実装は以下の通りです。
/*protected static */SFYResponderSmp SFYResponder::Factory(SFYResponderPtr responder, SFCErrorPtr exception)
{
SFCError error;
SFYResponderSmp result;
error = SFERR_NO_ERROR;
if (responder != null) {
if ((error = responder->static_catch()) == SFERR_NO_ERROR) {
responder->Initialize(); レスポンダを初期化する
result.Set(responder, false);
}
else {
::delete responder;
}
}
else {
error = SFERR_NO_MEMORY;
}
if (exception != null) {
*exception = error;
}
return result;
}// SFYResponder::Factory //
[ public, const ] SFYResponderSmp GetChildBack(Void);
[ public, const ] SFYResponderSmp GetChildBack( Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SFYResponderSmp GetChildBack( UInt32 id // ID );
[ public, const ] SFYResponderSmp GetChildBack( UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
最背面に位置する子レスポンダ。
存在しない場合は null を返します。
SFYResponderSmp child; すべての子レスポンダの中で最背面のレスポンダを取得する方法 child = GetChildBack(); ID = 128 の子レスポンダの中で最背面のレスポンダを取得する方法 child = GetChildBack(128); 可視かつ活性な子レスポンダの中で最背面のレスポンダを取得する方法(操作可能とフォーカスの状態は問わない) child = GetChildBack(true, true, false, false); 可視、活性かつ操作可能な子レスポンダの中で最背面のレスポンダを取得する方法(フォーカスの状態は問わない) child = GetChildBack(true, true, true, false);
SFYResponder::GetChildFront | SFYResponder::GetChildBackward | SFYResponder::GetNthBackward | ID | 状態 | 子レスポンダ
[ public, const ] SFYResponderSmp GetChildBackward( SInt32 index // 順番 (0-based) );
[ public, const ] SFYResponderSmp GetChildBackward( SInt32 index // 順番 (0-based) Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SFYResponderSmp GetChildBackward( SInt32 index // 順番 (0-based) UInt32 id // ID );
[ public, const ] SFYResponderSmp GetChildBackward( SInt32 index // 順番 (0-based) UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
背面から数えて指定された順番に位置する子レスポンダ。
存在しない場合は null を返します。
SFYResponderSmp child; すべての子レスポンダの中で背面から 3 番目のレスポンダを取得する方法 child = GetChildBackward(2); ID = 128 の子レスポンダの中で背面から 3 番目のレスポンダを取得する方法 child = GetChildBackward(2, 128); 可視かつ活性な子レスポンダの中で背面から 3 番目のレスポンダを取得する方法(操作可能とフォーカスの状態は問わない) child = GetChildBackward(2, true, true, false, false); 可視、活性かつ操作可能な子レスポンダの中で背面から 3 番目のレスポンダを取得する方法(フォーカスの状態は問わない) child = GetChildBackward(2, true, true, true, false);
SFYResponder::GetChildForward | SFYResponder::GetNthBackward | SFYResponder::GetChildBack | ID | 状態 | 子レスポンダ
[ public, const ] SInt32 GetChildCount(Void);
[ public, const ] SInt32 GetChildCount( Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SInt32 GetChildCount( UInt32 id // ID );
[ public, const ] SInt32 GetChildCount( UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
子レスポンダの数。
SInt32 count; すべての子レスポンダの数を取得する方法 count = GetChildCount(); ID = 128 の子レスポンダの数を取得する方法 count = GetChildCount(128); 可視かつ活性な子レスポンダの数を取得する方法(操作可能とフォーカスの状態は問わない) count = GetChildCount(true, true, false, false); 可視、活性かつ操作可能な子レスポンダの数を取得する方法(フォーカスの状態は問わない) count = GetChildCount(true, true, true, false);
[ public, const ] SFYResponderSmp GetChildForward( SInt32 index // 順番 (0-based) );
[ public, const ] SFYResponderSmp GetChildForward( SInt32 index // 順番 (0-based) Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SFYResponderSmp GetChildForward( SInt32 index // 順番 (0-based) UInt32 id // ID );
[ public, const ] SFYResponderSmp GetChildForward( SInt32 index // 順番 (0-based) UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
前面から数えて指定された順番に位置する子レスポンダ。
存在しない場合は null を返します。
SFYResponderSmp child; すべての子レスポンダの中で前面から 3 番目のレスポンダを取得する方法 child = GetChildForward(2); ID = 128 の子レスポンダの中で前面から 3 番目のレスポンダを取得する方法 child = GetChildForward(2, 128); 可視かつ活性な子レスポンダの中で前面から 3 番目のレスポンダを取得する方法(操作可能とフォーカスの状態は問わない) child = GetChildForward(2, true, true, false, false); 可視、活性かつ操作可能な子レスポンダの中で前面から 3 番目のレスポンダを取得する方法(フォーカスの状態は問わない) child = GetChildForward(2, true, true, true, false);
SFYResponder::GetChildBackward | SFYResponder::GetNthForward | SFYResponder::GetChildFront | ID | 状態 | 子レスポンダ
[ public, const ] SFYResponderSmp GetChildFront(Void);
[ public, const ] SFYResponderSmp GetChildFront( Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SFYResponderSmp GetChildFront( UInt32 id // ID );
[ public, const ] SFYResponderSmp GetChildFront( UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
最前面に位置する子レスポンダ。
存在しない場合は null を返します。
SFYResponderSmp child; すべての子レスポンダの中で最前面のレスポンダを取得する方法 child = GetChildFront(); ID = 128 の子レスポンダの中で最前面のレスポンダを取得する方法 child = GetChildFront(128); 可視かつ活性な子レスポンダの中で最前面のレスポンダを取得する方法(操作可能とフォーカスの状態は問わない) child = GetChildFront(true, true, false, false); 可視、活性かつ操作可能な子レスポンダの中で最前面のレスポンダを取得する方法(フォーカスの状態は問わない) child = GetChildFront(true, true, true, false);
SFYResponder::GetChildBack | SFYResponder::GetChildForward | SFYResponder::GetNthForward | ID | 状態 | 子レスポンダ
[ public, const ] SFYDistributerPtr GetDistributer(Void);
レスポンダに設定された配信エンジン。
設定されていない場合、null が返ります。
この関数は、 このレスポンダに設定されている配信エンジンを取得します。
[ public, const ] SFYResponderSmp GetFrame(Void);
この関数は、 SFYResponder::SetFrame 関数を使用してこのレスポンダに装着された(アタッチメントフレーム)を取得します。
[ public, const ] SFXRectangle GetGlobalBound(Void);
レスポンダのグローバル領域。
この関数は、 このレスポンダのグローバル領域を取得します。
注意 | |
---|---|
グローバル領域は、 BREW インターフェースにレスポンダの実領域を デバイス画面の左上端を原点とする絶対座標系で表した矩形領域として渡す必要がある場合に利用します。 |
[ public, const ] UInt32 GetID(Void);
このレスポンダの ID [32ビット符号なし整数(UInt32 型)]
この関数は、 このレスポンダのID[32ビット符号なし整数(UInt32 型)]を取得します。
[ public, const ] SFXRectangle GetLocalBound(Void);
レスポンダのローカル領域。
この関数は、 このレスポンダのローカル領域を取得します。
SFYResponder::SetVirtualBound | SFYResponder::GetVirtualBound | SFYResponder::GetGlobalBound | SFXRectangle | ローカル領域
[ public, const ] SInt32 GetNthBackward(Void);
[ public, const ] SInt32 GetNthBackward( Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SInt32 GetNthBackward( UInt32 id // ID );
[ public, const ] SInt32 GetNthBackward( UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
このレスポンダの背面からの位置
SInt32 index; すべての姉妹レスポンダの中で背面から数えて何番目かを取得する方法 index = GetNthBackward(); ID = 128 の姉妹レスポンダの中で背面から数えて何番目かを取得する方法 index = GetNthBackward(128); 可視かつ活性な姉妹レスポンダの中で背面から数えて何番目かを取得する方法(操作可能とフォーカスの状態は問わない) index = GetNthBackward(true, true, false, false); 可視、活性かつ操作可能な姉妹レスポンダの中で背面から数えて何番目かを取得する方法(フォーカスの状態は問わない) index = GetNthBackward(true, true, true, false);
SFYResponder::GetNthForward | SFYResponder::GetChildBackward | SFYResponder::GetChildBack | ID | 姉妹レスポンダ | 状態
[ public, const ] SInt32 GetNthForward(Void);
[ public, const ] SInt32 GetNthForward( Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] SInt32 GetNthForward( UInt32 id // ID );
[ public, const ] SInt32 GetNthForward( UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
このレスポンダの前面からの位置
SInt32 index; すべての姉妹レスポンダの中で前面から数えて何番目かを取得する方法 index = GetNthForward(); ID = 128 の姉妹レスポンダの中で前面から数えて何番目かを取得する方法 index = GetNthForward(128); 可視かつ活性な姉妹レスポンダの中で前面から数えて何番目かを取得する方法(操作可能とフォーカスの状態は問わない) index = GetNthForward(true, true, false, false); 可視、活性かつ操作可能な姉妹レスポンダの中で前面から数えて何番目かを取得する方法(フォーカスの状態は問わない) index = GetNthForward(true, true, true, false);
SFYResponder::GetNthBackward | SFYResponder::GetChildForward | SFYResponder::GetChildFront | ID | 姉妹レスポンダ | 状態
[ public, const ] SFYResponderSmp GetParent(Void);
この関数は、 このレスポンダの親レスポンダを取得します。
このレスポンダがアタッチメントフレームである場合は、 コンテントレスポンダの親レスポンダを返します。
アタッチメントフレームとコンテントレスポンダについて | |
---|---|
詳細は、SFYResponder::SetFrame 関数の解説を参照してください。 |
[ public, const ] Bool GetPropertyTransparent(Void);
この関数は、 このレスポンダの透過属性を取得します。
[ public, const ] SFXRectangleConstRef GetRealBound(Void);
レスポンダの実領域。
この関数は、 このレスポンダの実領域を取得します。
SFYResponder::SetRealBound | SFYResponder::GetVirtualBound | SFYResponder::GetGlobalBound | SFXRectangle | 実領域
[ public, const ] VoidPtr GetReference(Void);
このレスポンダのリファレンス値[4 バイト値(VoidPtr 型)]
何も設定されていない場合は null が返ります。
この関数は、 このレスポンダのリファレンス値[4 バイト値(VoidPtr 型)]を取得します。 何も設定されていない場合は null が返ります。
以下は、テキストボタンコントロールを識別するための番号をリファレンス値として設定し取得するためのコードです。
SFZTextButtonControlSmp _button; SInt32 i; // 10 個のテキストボタンコントロールを作成し番号(リファレンス値)を設定する for (i = 0; i < 10; ++i) { // テキストボタンコントロールを作成する if ((_button = SFZTextButtonControl::NewInstance(&error)) != null) { // テキストボタンコントロールの親 GetThis() に設定する error = _button->SetParent(GetThis()); if (error == SFERR_NO_ERROR) { // テキストボタンコントロール識別用番号を設定する _button->SetReference(reinterpret_cast<VoidPtr>(i)); } } } ... // テキストボタンコントロール識別用番号を取得する SInt32 number = reinterpret_cast<SInt32>(_button->GetReference());
[ public, const ] SFYRendererPtr GetRenderer(Void);
レスポンダに設定された描画エンジン。
設定されていない場合、null が返ります。
この関数は、 このレスポンダに設定されている描画エンジンを取得します。
[ public ] SFYResponderSmp GetRoot(Void);
レスポンダが所属するレスポンダツリーのルートレスポンダ。
この関数は、 このレスポンダが所属するレスポンダツリーのルートレスポンダを取得します。
ルートレスポンダとはレスポンダツリーの最上位に位置するレスポンダです。
親レスポンダを持たないレスポンダはルートレスポンダであるとみなされます。
[ public, const ] Bool GetStateActive( Bool inherit = false // 状態のフラグ値、または状態の ON / OFF 値の何れを取得するか );
この関数は、 このレスポンダの活性状態を取得します。
引数に true を指定すると、状態の ON / OFF 値を取得できます。 デフォルト値である false を設定すると、状態のフラグ値を取得できます。
引数に true を指定したとき、 状態が ON ときは true、OFF のときは false が返ります。
Tip | |
---|---|
このレスポンダがアタッチメントフレームである場合は、 コンテントレスポンダの状態の ON / OFF 値が返ります。 ただし、アタッチメントフレームのすべての状態のフラグ値が true に設定されていることが前提になります。 |
注意 | |
---|---|
活性状態が ON であるとき、 レスポンダは実際に活性状態として描画されます。 |
[ public, const ] Bool GetStateEnable( Bool inherit = false // 状態のフラグ値、または状態の ON / OFF 値の何れを取得するか );
この関数は、 このレスポンダの操作可能状態を取得します。
引数に true を指定すると、状態の ON / OFF 値を取得できます。 デフォルト値である false を設定すると、状態のフラグ値を取得できます。
引数に true を指定したとき、 状態が ON ときは true、OFF のときは false が返ります。
Tip | |
---|---|
このレスポンダがアタッチメントフレームである場合は、 コンテントレスポンダの状態の ON / OFF 値が返ります。 ただし、アタッチメントフレームのすべての状態のフラグ値が true に設定されていることが前提になります。 |
注意 | |
---|---|
操作可能状態が ON であるとき、 レスポンダは実際に操作可能です(フォーカスを移動できます)。 |
この関数は、 このレスポンダのフォーカス状態を取得します。
引数に true を指定すると、状態の ON / OFF 値を取得できます。 デフォルト値である false を設定すると、状態のフラグ値を取得できます。
引数に true を指定したとき、 状態が ON ときは true、OFF のときは false が返ります。
Tip | |
---|---|
このレスポンダがアタッチメントフレームである場合は、 コンテントレスポンダの状態の ON / OFF 値が返ります。 ただし、アタッチメントフレームのすべての状態のフラグ値が true に設定されていることが前提になります。 |
注意 | |
---|---|
フォーカス状態が ON であるとき、 レスポンダは実際にフォーカスされています。 |
この関数は、 このレスポンダの有効状態を取得します。
引数に true を指定すると、状態の ON / OFF 値を取得できます。 デフォルト値である false を設定すると、状態のフラグ値を取得できます。
引数に true を指定したとき、 状態が ON ときは true、OFF のときは false が返ります。
Tip | |
---|---|
このレスポンダがアタッチメントフレームである場合は、 コンテントレスポンダの状態の ON / OFF 値が返ります。 ただし、アタッチメントフレームのすべての状態のフラグ値が true に設定されていることが前提になります。 |
注意 | |
---|---|
有効状態が ON であるときに限り、 レスポンダはイベントを受信できます。 |
SFYResponder::Initialize | SFYResponder::Terminate | SFYResponder::SetDistributer | SFYResponder::SetFrame | 状態
[ public, const ] Bool GetStateVisible( Bool inherit = false // 状態のフラグ値、または状態の ON / OFF 値の何れを取得するか );
この関数は、 このレスポンダの可視状態を取得します。
引数に true を指定すると、状態の ON / OFF 値を取得できます。 デフォルト値である false を設定すると、状態のフラグ値を取得できます。
引数に true を指定したとき、 状態が ON ときは true、OFF のときは false が返ります。
Tip | |
---|---|
このレスポンダがアタッチメントフレームである場合は、 コンテントレスポンダの状態の ON / OFF 値が返ります。 ただし、アタッチメントフレームのすべての状態のフラグ値が true に設定されていることが前提になります。 |
注意 | |
---|---|
可視状態が ON であるとき、 レスポンダは実際に見えます。 |
[ public ] SFXRectangle GetSuitableBound(Void);
[ public ] SFXRectangle GetSuitableBound( SFXRectangleConstRef rectangle // ヒント領域 );
[ public ] SFXRectangle GetSuitableBound( SFXRectangleConstRef param // ヒント領域 HorizontalEnum horizontal // 水平アライメント VerticalEnum vertical // 垂直アライメント );
レスポンダの最適な領域(サイズ)。
この関数は、 このレスポンダの最適な領域を取得します。 この関数はレスポンダの最適な実領域を設定するときに利用します。
自身が装着済みフレームの場合は、 フレームが装着されているレスポンダの最適な領域計算に委任します。
引数にヒント領域を指定した場合は、 ヒント領域内で最適な領域を計算します。
引数にヒント領域およびアライメントを指定した場合は、 ヒント領域内で最適な領域を計算したのち、領域をアライメントに沿って整列します。
戻り値の最適な領域の始点は以下の通りです。
この関数を使用して実領域を設定する際は、 必要に応じて最適な位置に再配置してください。
Tip | |
---|---|
SFZSoftKeyControl クラスは携帯電話の画面最下端に配置されます。 |
Tip | |
---|---|
ラベルやボタンなどのレスポンダは、 テキストやイメージを設定した後 SFYResponder::GetSuitableBound() を呼び出して最適な領域を取得します。 戻り値の領域の始点は (0, 0) なので、 SFXRectangle::SetOrigin / SFXRectangle::Offset 関数などを利用して最適な位置に再配置してから実領域を設定します。 |
領域イベント[(SFEVT_RESPONDER_BOUND, SFP16_BOUND_OPTIMIZE) イベント] | |
---|---|
SFYResponder::GetSuitableBound 関数は、 引数にヒント領域を指定した場合は 領域イベント [SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_OPTIMIZE, rectangle)] をレスポンダに送信します。 SFYWidget クラスを継承するレスポンダが領域イベントを受信すると、 SFYWidget::SFYWidget コンストラクタで最初に登録した領域イベント専用ハンドラの処理により、 SFYWidget::HandleBoundOptimize 仮想関数が呼び出されます。 ※ 領域イベントの P32 パラメータ rectangle にはヒント領域が初期設定されています。 |
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_OPTIMIZE) イベント受信時の最適な領域計算 | |
---|---|
SFYWidget::HandleBoundOptimize 仮想関数をオーバーライドする以外に、 領域イベント専用ハンドラ[XANDLER_DECLARE_VOIDBOUND]を定義・実装し レスポンダに登録して行うことも可能です。 最適な領域の計算は、最初に SFYWidget::HandleBoundOptimize 仮想関数を実行し、 次に領域イベント専用ハンドラを登録した順に実行して行われます。 領域イベント専用ハンドラを宣言し登録する手間が省けるので、 通常は SFYWidget::HandleBoundOptimize 仮想関数をオーバーライドして処理を記述します。 |
領域イベント[(SFEVT_RESPONDER_BOUND, SFP16_BOUND_REQUEST) イベント] | |||||
---|---|---|---|---|---|
SFYResponder::GetSuitableBound 関数は、 引数に何も指定しない場合は 領域イベント [SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_REQUEST, rectangle)] をレスポンダに送信します。 SFYWidget クラスを継承するレスポンダが領域イベントを受信すると、 SFYWidget::SFYWidget コンストラクタで最初に登録した領域イベント専用ハンドラの処理により、 SFYWidget::HandleBoundRequest 仮想関数が呼び出されます。 ※ 領域イベントの P32 パラメータ rectangle には実領域が初期設定されています。
|
(SFEVT_RESPONDER_BOUND, SFP16_BOUND_REQUEST) イベント受信時の最適な領域計算 | |
---|---|
SFYWidget::HandleBoundRequest 仮想関数をオーバーライドする以外に、 領域イベント専用ハンドラ[XANDLER_DECLARE_VOIDBOUND]を定義・実装し レスポンダに登録して行うことも可能です。 最適な領域の計算は、最初に SFYWidget::HandleBoundRequest 仮想関数を実行し、 次に領域イベント専用ハンドラを登録した順に実行して行われます。 領域イベント専用ハンドラを宣言し登録する手間が省けるので、 通常は SFYWidget::HandleBoundRequest 仮想関数をオーバーライドして処理を記述します。 |
GetSuitableBound 関数が有効になるとき | |
---|---|
実際の計算は SFYWidget::HandleBoundRequest / SFYWidget::HandleBoundOptimize 仮想関数で行われます。 これらの関数が実装されていないレスポンダでは、 引数に指定したヒント領域、または実領域がそのまま返るだけです。 |
複数行テキストを保持するレスポンダ | |
---|---|
SFYMultipleTextWidget インスタンス(複数行テキスト)を保持するレスポンダでは、 SFYResponder::GetSuitableBound 関数を呼び出すときに引数を指定しない場合、 予め SFYResponder::SetRealBound 関数を使用して実領域の横幅を設定する必要があります。 これは計算に必要なヒント値として利用されます。 |
以下は、テキストボタンに最適な実領域を設定するコードです。
SFZTextButtonControlSmp button; ... // テキストボタンコントロールのテキストを設定する button->SetText("sample"); // 1. テキストを基にしてテキストボタンコントロールの最適な領域を計算する // 2. SetOrigin() を呼び出して最適な領域を再配置して実領域を設定する button->SetRealBound(button->GetSuitableBound().SetOrigin(10, 10)); ...
SFYWidget::HandleBoundRequest | SFYWidget::HandleBoundOptimize | SFYResponder::SetRealBound | SFXRectangle | 実領域 | 領域イベント[SFEVT_RESPONDER_BOUND]
[ public ] SFXMargin GetSuitableMargin(Void);
この関数は、 このレスポンダのフレーム余白領域を取得します。 このレスポンダの外枠やタイトルは、このフレーム余白領域に描画されます。
この関数は、 余白イベント [SFXEvent(SFEVT_RESPONDER_MARGIN, SFP16_MARGIN_REQUEST, margin)] をレスポンダに送信します。
SFYFrame を継承する具象フレームのレスポンダでは、 余白イベントを受信すると、 SFYFrame::HandleMarginRequest 仮想関数が呼び出してフレーム余白領域を計算します。
警告 | |
---|---|
SFYResponder::SetFrame 関数を使用してレスポンダにフレームを装着する場合は、 内部でこの関数を使用してアタッチメントフレームやコンテントレスポンダの実領域が自動的に計算されます。 そのため、開発者が明示的にこの関数を利用する機会はほとんどないでしょう。 |
SFYFrame::HandleMarginRequest | SFYResponder::SetFrame | SFXMargin | SFYFrame | SFXEvent | 余白イベント[SFEVT_RESPONDER_MARGIN] | フレーム
[ protected ] SFYResponderSmp GetThis(Void);
スマートポインタで保持された this
この関数は、このレスポンダのスマートポインタを取得します。
この関数の内部実装は以下の通りです。
/*protected */SFYResponderSmp SFYResponder::GetThis(Void) { return SFYResponderSmp(this); }// SFYResponder::GetThis //
[ public, const ] SFCType GetType(Void);
この関数は、 このレスポンダのタイプ[4 文字リテラル(four_char_code マクロで定義)]を取得します。
Void USRApplication::PrintType(SFYResponderSmpConstRef param) Const { switch (param->GetType()) { case SFZWindow::CODE_TYPE: TRACE("This responder is of the SFZWindow class."); break; case SFZDialog::CODE_TYPE: TRACE("This responder is of the SFZDialog class."); break; case SFZTextButtonControl::CODE_TYPE: TRACE("This responder is of the SFZTextButtonControl class."); break; default: TRACE("This responder is of the unknown class."); break; } return; }
[ public, const ] SFXRectangleConstRef GetVirtualBound(Void);
レスポンダの仮想領域。
この関数は、 このレスポンダの仮想領域を取得します。
SFYResponder::SetVirtualBound | SFYResponder::GetRealBound | SFYResponder::GetLocalBound | SFXRectangle | 仮想領域
[ public, const ] Bool HasFrame(Void);
[ public ] Void Initialize(Void);
この関数は、 このレスポンダの有効状態フラグを true("有効")に設定します。
注意 | |
---|---|
SFYResponder::Initialize 関数は SFYResponder::Factory 関数内で自動的に呼び出されるので、 開発者が明示的にこの関数を呼び出すことはありません。 |
注意 | |
---|---|
SFYResponder::Terminate 関数を使用して終了処理したレスポンダに対してこの関数を呼び出し再初期化することは禁止されています。 |
以下は、SFYResponder::Factory 関数の実装の中で SFYResponder::Initialize 関数が使用されている例です。 通常、SFYResponder::Initialize 関数はここでだけ使用されます。
/*protected static */SFYResponderSmp SFYResponder::Factory(SFYResponderPtr responder, SFCErrorPtr exception)
{
SFCError error;
SFYResponderSmp result;
error = SFERR_NO_ERROR;
if (responder != null) {
if ((error = responder->static_catch()) == SFERR_NO_ERROR) {
responder->Initialize(); レスポンダを初期化する
result.Set(responder, false);
}
else {
::delete responder;
}
}
else {
error = SFERR_NO_MEMORY;
}
if (exception != null) {
*exception = error;
}
return result;
}// SFYResponder::Factory //
SFYResponder::Terminate | SFYResponder::Factory | SFXEvent | SFYResponder::Render | 状態 | 状態イベント[SFEVT_RESPONDER_STATE]
[ public ] Void Invalidate(Void);
[ public ] Void Invalidate( SFXRectangleConstRef param // 設定する領域 [デフォルト値(何も指定しない場合): このレスポンダのローカル領域] );
この関数は、 指定された領域(ローカル領域の座標系で表した矩形) を再描画領域に登録します。
デフォルト値: param 引数に何も指定しない場合、このレスポンダのローカル領域。
"SFYResponder::Render(false)" の実行により 描画エンジンを起動した場合、 可視領域と交差領域を持つ再描画領域を登録したレスポンダだけが 描画イベントを受信します。
true を指定した場合、 再描画領域の登録に関係なく、 可視領域を持つレスポンダはすべて描画イベントを受信します。
パフォーマンスの観点から、 Invalidate 関数により再描画が必要なレスポンダの領域だけを再描画領域に登録し、 Render(false) 関数を呼び出して再描画を行う方法を推奨します。
なお、Render 関数で再描画の対象となるレスポンダは、 レスポンダツリー内でこの関数を呼び出したレスポンダとその子孫レスポンダです。
注意 | |
---|---|
再描画領域を登録していても、 その領域がレスポンダの可視領域と交差領域を持たない場合は、 描画イベントを受信しません。 |
Invalidate 関数の呼び出しについて | |
---|---|
SophiaFramework UNIVERSE 標準提供のレスポンダクラスでは、 領域、状態、属性、親、姉妹間の順序、テキスト、フォント、色などの視覚的要素を変更すると、 再描画が必要なレスポンダの領域が自動的に再描画領域に登録されます。 param 引数にレスポンダの部分領域を指定して再描画の最適化を行う場合を除き、 Invalidate 関数を呼び出す必要はありません。 開発者が定義したレスポンダクラスでは、 テキストやイメージなどレスポンダ内の視覚的な要素を変更した場合、 必ず Invalidate 関数により再描画領域を登録するようにしてください。 再描画領域を登録しなければ、 "SFYResponder::Render(false)" を呼び出して描画エンジンを起動したときにレスポンダは再描画されません。 |
Invalidate 関数の引数について | |
---|---|
SFYResponder::Invalidate 関数の引数を利用することにより、 再描画領域をレスポンダ内の部分領域に限定できます (指定した領域と可視領域の交差領域でクリッピングして高速な描画処理を行います)。 指定した領域のすべてが前面に配置されたレスポンダに隠れる場合、 可視領域を持つレスポンダであっても描画ハンドラは呼び出されません。 |
描画するテキストを変更する方法
SFXWideString _my_text; ... Void USRWindow::SetText(SFXWideStringConstRef param) { if (param != _my_text) { // テキストの内容が異なる場合 _my_text = param; // テキストを設定する Invalidate(); // 再描画領域として USRWindow の実領域を登録する } return; } // 描画ハンドラ: イベントループの終わりに呼び出される Render() の中から起動される XANDLER_IMPLEMENT_VOIDRENDER(USRWindow, OnRender, invoker, reason, graphics) { // 実際にテキストを描画する graphics->DrawSingleText(_my_text, GetLocalBound(), SFXRGBColor(0x00, 0x00, 0x00, 0x00)); return; }
SFYResponder::Render | SFZRoot | ローカル領域 | 実領域 | 可視領域 | 再描画領域 | 状態 | 描画処理 | 描画エンジン | 描画イベント | 描画ハンドラ | レスポンダツリー | イベントループ | ルート(基礎編)
[ public ] Void InvokeBackward( SFXEventConstRef event // イベント Bool overload // 重複条件 BoolPtr result = null // 処理結果 );
この関数は、 指定されたコールバック型イベントをこのレスポンダに送信します。
ハンドラは、 このレスポンダのハンドラリストに登録された順で起動されます。
重複処理の条件パラメータである overload 引数に false が渡された場合、 ハンドラがイベントを処理して true を返すと、そこで処理を終了します。
overload 引数に true が渡された場合、 ハンドラがイベントを処理して true を返しても、無くなるまでハンドラの起動を継続します。
レスポンダイベント | |
---|---|
レスポンダイベントは、 InvokeBackward / InvokeForward 関数を使用して送信します。 |
利用シーン | |
---|---|
ボタンコントロールやダイアログなどのレスポンダ実装において、 レスポンダ内のテキストやイメージが変更されたときにスタイルイベント[SFEVT_RESPONDER_STYLE]を送信するために利用します。 |
SFYResponder::InvokeForward 関数 | |
---|---|
ハンドラリストへの登録の逆順でハンドラを起動するには、 SFYResponder::InvokeForward 関数を使います。 |
イベントの送信先 | |
---|---|
コールバック型イベントは、 送信先レスポンダの子孫レスポンダに配信されません。 |
デストラクタ内でのイベント送信 | |
---|---|
デストラクタを実行する前にこのレスポンダの有効状態は無効になっているため、 デストラクタ内でこのレスポンダにイベントを送信してはいけません(送信しても動作は保証されません)。 |
以下は、テキストの変更時にスタイルイベントを送信するコードです。
SFXWideString _my_text; ... USRWindow::SetText(SFXWideStringConstRef param) { if (param != _my_text) { // テキストの内容が異なる場合 _my_text = param; // テキストを設定する Invalidate(); // 再描画領域として USRWindow の実領域を登録する // スタイルイベントを送信する InvokeBackward(SFXEvent(SFEVT_RESPONDER_STYLE, SFP16_STYLE_TEXT, 0), true); } return; }
SFYResponder::InvokeForward | SFYResponder::Distribute | SFXEvent | レスポンダイベント | コールバック型 | 配信型 | ハンドラ | ハンドラリスト | スタイルイベント[SFEVT_RESPONDER_STYLE] | イベントループ
[ public ] Void InvokeForward( SFXEventConstRef event // イベント Bool overload // 重複条件 BoolPtr result = null // 処理結果 );
この関数は、 指定されたコールバック型イベントをこのレスポンダに送信します。
ハンドラは、 このレスポンダのハンドラリストに登録された逆順で起動されます。
重複処理の条件パラメータである overload 引数に false が渡された場合、 ハンドラがイベントを処理して true を返すと、そこで処理を終了します。
overload 引数に true が渡された場合、 ハンドラがイベントを処理して true を返しても、無くなるまでハンドラの起動を継続します。
レスポンダイベント | |
---|---|
レスポンダイベントは、 InvokeBackward / InvokeForward 関数を使用して送信します。 |
利用シーン | |
---|---|
ボタンコントロールやダイアログなどのレスポンダ実装において、 それらに対する操作が行われた時に結果イベント[SFEVT_RESPONDER_RESULT]を送信するために利用します。 |
SFYResponder::InvokeBackward 関数 | |
---|---|
ハンドラリストへの登録順でハンドラを起動するには、SFYResponder::InvokeBackward 関数を使います。 |
イベントの送信先 | |
---|---|
コールバック型イベントは、 送信先レスポンダの子孫レスポンダに配信されません。 |
デストラクタ内でのイベント送信 | |
---|---|
デストラクタを実行する前にこのレスポンダの有効状態は無効になっているため、 デストラクタ内でこのレスポンダにイベントを送信してはいけません(送信しても動作は保証されません)。 |
以下は、ボタンの操作時に結果イベントを送信するコードです。
Void USRControl::HandleOperateKeyRelease(Void)
{
// 結果イベントを送信する
InvokeForward(SFXEvent(SFEVT_RESPONDER_RESULT, SFP16_RESULT_OK, GetCurrentValue()), false);
return;
}
SFYResponder::InvokeBackward | SFYResponder::Distribute | SFXEvent | レスポンダイベント | コールバック型 | 配信型 | ハンドラ | ハンドラリスト | 結果イベント[SFEVT_RESPONDER_RESULT] | イベントループ
[ public, const ] Bool IsBack(Void);
[ public, const ] Bool IsBack( Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] Bool IsBack( UInt32 id // ID );
[ public, const ] Bool IsBack( UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
すべての姉妹レスポンダの中で最背面かどうかを判定する方法 if (IsBack()) { ... } ID = 128 の姉妹レスポンダの中で最背面かどうかを判定する方法 if (IsBack(128)) { ... } 可視かつ活性な姉妹レスポンダの中で最背面かどうかを判定する方法(操作可能とフォーカスの状態は問わない) if (IsBack(true, true, false, false)) { ... } 可視、活性かつ操作可能な姉妹レスポンダの中で最背面かどうかを判定する方法(フォーカスの状態は問わない) if (IsBack(true, true, true, false)) { ... }
SFYResponder::IsFront | SFYResponder::IsNthBackward | ID | 姉妹レスポンダ | 状態
[ public, const ] Bool IsFrame(Void);
この関数は、このレスポンダがアタッチメントフレームであるかどうかを判定します。
アタッチメントフレームについて | |
---|---|
詳細は、SFYResponder::SetFrame 関数の解説を参照してください。 |
[ public, const ] Bool IsFront(Void);
[ public, const ] Bool IsFront( Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] Bool IsFront( UInt32 id // ID );
[ public, const ] Bool IsFront( UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
すべての姉妹レスポンダの中で最前面かどうかを判定する方法 if (IsFront()) { ... } ID = 128 の姉妹レスポンダの中で最前面かどうかを判定する方法 if (IsFront(128)) { ... } 可視かつ活性な姉妹レスポンダの中で最前面かどうかを判定する方法(操作可能とフォーカスの状態は問わない) if (IsFront(true, true, false, false)) { ... } 可視、活性かつ操作可能な姉妹レスポンダの中で最前面かどうかを判定する方法(フォーカスの状態は問わない) if (IsFront(true, true, true, false)) { ... }
SFYResponder::IsBack | SFYResponder::IsNthForward | ID | 姉妹レスポンダ | 状態
[ public, const ] Bool IsNthBackward( SInt32 index // 順番 (0-based) );
[ public, const ] Bool IsNthBackward( SInt32 index // 順番 (0-based) Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] Bool IsNthBackward( SInt32 index // 順番 (0-based) UInt32 id // ID );
[ public, const ] Bool IsNthBackward( SInt32 index // 順番 (0-based) UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
すべての姉妹レスポンダの中で背面から 3 番目かどうかを判定する方法 if (IsNthBackward(2)) { ... } ID = 128 の姉妹レスポンダの中で背面から 3 番目かどうかを判定する方法 if (IsNthBackward(2, 128)) { ... } 可視かつ活性な姉妹レスポンダの中で背面から 3 番目かどうかを判定する方法(操作可能とフォーカスの状態は問わない) if (IsNthBackward(2, true, true, false, false)) { ... } 可視、活性かつ操作可能な姉妹レスポンダの中で背面から 3 番目かどうかを判定する方法(フォーカスの状態は問わない) if (IsNthBackward(2, true, true, true, false)) { ... }
SFYResponder::IsNthForward | SFYResponder::IsBack | ID | 姉妹レスポンダ | 状態
[ public, const ] Bool IsNthForward( SInt32 index // 順番 (0-based) );
[ public, const ] Bool IsNthForward( SInt32 index // 順番 (0-based) Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public, const ] Bool IsNthForward( SInt32 index // 順番 (0-based) UInt32 id // ID );
[ public, const ] Bool IsNthForward( SInt32 index // 順番 (0-based) UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
すべての姉妹レスポンダの中で前面から 3 番目かどうかを判定する方法 if (IsNthForward(2)) { ... } ID = 128 の姉妹レスポンダの中で前面から 3 番目かどうかを判定する方法 if (IsNthForward(2, 128)) { ... } 可視かつ活性な姉妹レスポンダの中で前面から 3 番目かどうかを判定する方法(操作可能とフォーカスの状態は問わない) if (IsNthForward(2, true, true, false, false)) { ... } 可視、活性かつ操作可能な姉妹レスポンダの中で前面から 3 番目かどうかを判定する方法(フォーカスの状態は問わない) if (IsNthForward(2, true, true, true, false)) { ... }
SFYResponder::IsNthBackward | SFYResponder::IsFront | ID | 姉妹レスポンダ | 状態
[ public, const ] Bool IsRoot(Void);
この関数は、 このレスポンダがルートレスポンダかどうかを判定します。
ルートレスポンダとはレスポンダツリーの最上位に位置するレスポンダです。
注意 | |
---|---|
親レスポンダを持たないレスポンダはルートレスポンダであるとみなされます。 |
SFYResponder::GetRoot | レスポンダツリー | ルートレスポンダ | ルート | SFZRoot
[ public ] SFCError Recover(Void);
この関数は、 デバイス画面保存用ビットマップを使用してこのレスポンダとレスポンダ空間との交差領域を復元します。
注意 | |
---|---|
この関数は、 このレスポンダが描画エンジン(SFYRenderer)が設定された、 ルートレスポンダでない場合は、 SFERR_INVALID_STATE が返ります。 また、デバイス画面保存用ビットマップが存在しない場合は、 SFERR_INVALID_STATE が返され、上記交差領域の復元は行われません。 |
デバイス画面保存用ビットマップ | |
---|---|
SophiaFramework UNIVERSE では、 SFYResponder::Render 関数により再描画した領域を「デバイス画面保存用ビットマップ」 と呼ぶデバイス画面を同じサイズの内部のビットマップに上書き保存します。 SFYResponder::Render 関数によるレスポンダの再描画では、 前回再描画時と同じ場合は、 描画ハンドラを呼び出す代わりに、 このビットマップから再描画領域をコピーすることにより再描画を高速に行っています。 |
SFYResponder::IsRoot | SFYResponder::SetRenderer | SFYResponder::Render | SFYRenderer | レスポンダ空間 | ルート | 描画処理 | 描画エンジン | ルートレスポンダ | レスポンダツリー
[ public ] SFCError RegisterHandler( SFXEventRangeConstRef range // イベント範囲 SFYHandler::RuleRecConstRef rule // ハンドラ規則 );
[ public ] SFCError RegisterHandler( SFXEventRangeConstRef range // イベント範囲 SFYHandler::HandlerSPP spp // ハンドラ関数 VoidPtr reference // リファレンス値 );
[ public ] SFCError RegisterHandler( SFXEventRangeConstPtr range // イベント範囲の配列 SFYHandler::RuleRecConstPtr rule // ハンドラ規則の配列 SInt32 length // 配列の要素数 );
[ public ] SFCError RegisterHandler( SFXEventRangeConstPtr range // イベント範囲の配列 SFYHandler::HandlerSPPConstPtr spp // ハンドラ関数の配列 VoidPtrConstPtr reference // リファレンス値の配列 SInt32 length // 配列の要素数 );
ハンドラ規則が適用されるイベントの範囲を表します。
ハンドラ関数とリファレンス値のセットを表します。
この関数は、 指定されたハンドラをこのレスポンダに登録します。
同一のイベントに対して複数のハンドラを登録することも可能です。 このとき、ハンドラは登録順または逆順で呼び出されます。 また、ハンドラがイベントを処理したとき、 そこで終了する、 あるいは、無くなるまでハンドラの呼び出しを継続する、 設定によりどちらも可能です。
標準トレーサに『配信条件: なし[SFYTracer::STATE_NONE]』で配信規則が登録されている BREW イベントを受信する方法 | |
---|---|
標準トレーサに『配信条件: なし[SFYTracer::STATE_NONE]』 で配信規則が登録されているBREW イベントは、 SFYApplication が内部で保持するルートを含めレスポンダには配信されません。 これは標準トレーサの配信規則が SFYDistributer インスタンスに登録されているからです。 このイベントは、 直接 SFYDistributer インスタンスにハンドラを登録して受信します。 具体的には以下の方法で行います。
|
SFCError error; 1 つのハンドラを登録する error = RegisterHandler(SFXEventRange(SFEVT_KEY, SFEVT_KEY, SFP16_BEGIN, SFP16_END), XANDLER_INTERNAL(OnKey) ); 複数のハンドラをまとめて登録する static SFXEventRange::AtomRecConst range[] = { { SFEVT_KEY, SFEVT_KEY, SFP16_BEGIN, SFP16_END}, { SFEVT_KEY_PRESS, SFEVT_KEY_PRESS, SFP16_BEGIN, SFP16_END}, { SFEVT_KEY_RELEASE, SFEVT_KEY_RELEASE, SFP16_BEGIN, SFP16_END} }; SFYHandler::RuleRec rule[lengthof(range)]; rule[0].spp = XANDLER_FUNCTION(OnKey); rule[0].reference = this; rule[1].spp = XANDLER_FUNCTION(OnKeyPress); rule[1].reference = this; rule[2].spp = XANDLER_FUNCTION(OnKeyRelease); rule[2].reference = this; error = RegisterHandler(atomic_cast(range), rule, lengthof(range));
SFYResponder::UnregisterHandler | SFYResponder::ClearHandler | SFYApplication::GetDistributer | SFYDistributer::RegisterHandler | SFYDistributer | SFXEvent | SFXEventRange | ハンドラ | 標準トレーサ
[ public ] SFCError RegisterTracer( SFXEventRangeConstRef range // イベント範囲 SFYTracer::RuleRecConstRef rule // トレーサ規則 );
[ public ] SFCError RegisterTracer( SFXEventRangeConstRef range // イベント範囲 SFYTracer::OrderEnum order // 処理順序 SFYTracer::StateEnum state // 配信条件 Bool overload // 重複条件 );
[ public ] SFCError RegisterTracer( SFXEventRangeConstPtr range // イベント範囲の配列 SFYTracer::RuleRecConstPtr rule // トレーサ規則の配列 SInt32 length // 配列の要素数 );
[ public ] SFCError RegisterTracer( SFXEventRangeConstPtr range // イベント範囲の配列 SFYTracer::OrderEnumConstPtr order // 配信順序の配列 SFYTracer::StateEnumConstPtr state // 配信条件の配列 BoolConstPtr overload // 重複条件の配列 SInt32 length // 配列の要素数 );
トレーサ規則が適用されるイベントの範囲を表します。
配信順序と配信条件と重複条件のセットを表します。
SFCError error; 1 つの配信規則をトレーサに登録する error = RegisterTracer(SFXEventRange(SFEVT_APP_START, SFEVT_APP_START, SFP16_BEGIN, SFP16_END), SFYTracer::ORDER_BACKWARD, SFYTracer::STATE_ALL, true); 複数の配信規則をまとめてトレーサに登録する static SFXEventRange::AtomRecConst range[] = { { SFEVT_APP_START, SFEVT_APP_START, SFP16_BEGIN, SFP16_END}, { SFEVT_APP_STOP, SFEVT_APP_STOP, SFP16_BEGIN, SFP16_END}, { SFEVT_APP_RESUME, SFEVT_APP_RESUME, SFP16_BEGIN, SFP16_END}, { SFEVT_APP_SUSPEND, SFEVT_APP_SUSPEND, SFP16_BEGIN, SFP16_END} }; static SFYTracer::RuleRecConst rule[lengthof(range)] = { { SFYTracer::ORDER_BACKWARD, SFYTracer::STATE_ALL, true}, { SFYTracer::ORDER_FORWARD, SFYTracer::STATE_ALL, true}, { SFYTracer::ORDER_BACKWARD, SFYTracer::STATE_ALL, true}, { SFYTracer::ORDER_FORWARD, SFYTracer::STATE_ALL, true} }; error = RegisterTracer(atomic_cast(range), rule, lengthof(range));
SFYTracer::StateEnum | SFYTracer::OrderEnum | SFYTracer::RuleRec | SFYResponder::UnregisterTracer | SFYResponder::ClearTracer | SFXEventRange | SFXEvent | SFYTracer | トレーサ
[ public ] SFCError Render( Bool force = false // 可視領域を持つすべてのこのレスポンダとその子孫レスポンダを再描画したい場合: true、 再描画領域に登録された、可視領域を持つこのレスポンダとその子孫レスポンダだけを再描画したい場合: false );
この関数は、 このレスポンダ以下のレスポンダツリーをレスポンダ空間に再描画します。
再描画の対象となるレスポンダは、 レスポンダツリー内のこのレスポンダ以下のレスポンダです。
注意 | |
---|---|
描画エンジン (SFYRenderer)が、 このレスポンダが所属するレスポンダツリーの ルートレスポンダに設定されていない場合は、 SFERR_INVALID_STATE が返り、再描画は行われません デフォルトの設定では、描画エンジンは SFYApplication クラスが内部に保持している ルートに設定されています。 |
[1]Render(false) または Render(): 引数に false、または何も指定しない場合
再描画領域が、 可視領域と交差領域を持つレスポンダだけが、 描画イベントを受信し、 描画ハンドラを起動します。
描画イベントを受信しなかったレスポンダは、 必要に応じて『デバイス画面保存用ビットマップ』を利用して、 可視領域を復元します。
描画エンジンの最適化処理 | |
---|---|
SFYResponder::Render 関数は、 以下の最適化処理を行います。 不可視状態であったり、 他のレスポンダに隠れて可視領域を持たない、 または可視領域が存在しても再描画領域と共通部分を持たないレスポンダは、 描画イベントを受信しません。 描画イベントを受信しなかったレスポンダは、 親レスポンダまたは妹レスポンダの再描画により一部または全部が書き換えられてしまった場合、 デバイス画面保存用ビットマップからコピーして可視領域を復元します。 |
デバイス画面保存用ビットマップ | |
---|---|
SFYResponder::Render 関数は、 実際に再描画した領域を『デバイス画面保存用ビットマップ』 と呼ぶデバイス画面と同一サイズの内部ビットマップに上書き保存します。 "SFYResponder::Render(false)" の実行で描画イベントを受信しなかったレスポンダは、 親レスポンダまたは妹レスポンダの再描画により一部または全部が書き換えられてしまった場合、 デバイス画面保存用ビットマップからコピーして自分の可視領域を復元します。 ※ デバイス画面保存用ビットマップを利用した再描画の最適化は、 内部で自動的に行われます。アプリ中断時にこのビットマップを解放するかどうかの判断を除き、 開発者はこれについて意識する必要はありません。 |
[2]Render(true): 引数に true を指定した場合(強制再描画を行う場合)
再描画領域の登録に関係なく、 可視領域を持つすべてのレスポンダが、 描画イベントを受信し、 描画ハンドラを起動します。
注意 | |
---|---|
再描画領域の登録に関係なく、 可視領域があれば描画ハンドラが起動される点に注意してください。 |
Render 関数の呼び出しのタイミング | |
---|---|
SFYResponder::Render 関数による 描画エンジン起動のタイミングは、以下の 3 つの何れかになります。 イベントループ終了時や、アプリ開始/再開時または優先的イベントハンドラ終了時は、 自動的に SFYResponder::Render 関数が呼び出され、描画エンジンが起動されます。 コールバック終了時は、 開発者が明示的に SFYResponder::Render 関数を呼び出して、 描画エンジンを起動する必要があります。 |
[非推奨(廃止予定)]グローバル領域イベント | |
---|---|
グローバル領域イベント[(SFEVT_RESPONDER_BOUND, SFP16_BOUND_GLOBAL) イベント]は、 SophiaFramework UNIVERSE 6.0 で廃止される予定です。 グローバル領域が必要になった場合は、 SFYResponder::GetGlobalBound 関数を使用して取得してください。 なお、 実領域や仮想領域が変更されると、 可視状態にあるこのレスポンダと子孫レスポンダは、 Render 関数の内部処理により再描画する直前にグローバル領域イベントを受信します。 |
以下は、タイマーコールバック内でレスポンダを再描画するコードです。
SInt16 _something; ... // タイマーコールバック XALLBACK_IMPLEMENT_SFXTIMER(USRWindow, OnTimer) { ++_something; Invalidate(); // 再描画領域として USRWindow の実領域を登録する Render(); // USRWindow 以下のレスポンダを再描画する _timer.Schedule(1000); return; } // 描画ハンドラ: Render() の中から起動される XANDLER_IMPLEMENT_VOIDRENDER(USRWindow, OnRender, invoker, reason, graphics) { // 実際に _something を描画する graphics->DrawSingleText(SFXWideString::Format("%d", _something), GetLocalBound(), SFXRGBColor(0x00, 0x00, 0x00, 0x00)); return; }
SFYResponder::Invalidate | SFYApplication::HandleEvent | SFYRenderer | SFZRoot | 描画エンジン | 描画処理 | 描画ハンドラ | イベントループ | ルートレスポンダ | レスポンダツリー | レスポンダ空間 | 状態 | 実領域 | 仮想領域 | 可視領域 | 再描画領域 | 親レスポンダ | 姉妹レスポンダ | 描画イベント[SFEVT_RESPONDER_RENDER] | 領域イベント[SFEVT_RESPONDER_BOUND] | ルート
[ public ] Void SetDistributer( SFYDistributerPtr param // 設定する値 );
この関数は、 指定された配信エンジンをこのレスポンダに設定します。
注意 | |
---|---|
配信エンジンは、 イベントを配信するレスポンダツリーの ルートレスポンダに設定します。 なお、SFYApplication::SFYApplication コンストラクタの処理により、 SFYApplication クラスが内部で保持するルートに配信エンジンが設定されています。 通常、この関数を呼び出す必要はありません。 |
有効状態の変化 | |
---|---|
ルートレスポンダに配信エンジンを設定すると、ルートレスポンダの有効状態は OFF から ON に変化します。 これに伴い、レスポンダツリー上の各レスポンダでは、 状態フラグの設定内容に応じて状態が OFF から ON に変化して、 下記の状態イベントを受信します。
|
SFYResponder::GetDistributer | SFYApplication::SFYApplication | SFYResponder::Invalidate | SFYApplication | SFZRoot | SFYResponder::Render | 配信エンジン | ルート | レスポンダツリー | ルートレスポンダ | 状態
[ public ] SFCError SetFrame( SFYResponderSmpConstRef param // 装着するフレーム );
この関数は、 このレスポンダに引数に指定されたフレームを装着します。 このとき、 レスポンダに装着したフレームをアタッチメントフレーム、 フレームが装着されたレスポンダをコンテントレスポンダと呼びます。
param 引数には、親レスポンダが設定されていない、 SFYFrame を継承するクラスのインスタンス(フレーム)を指定します。
一方、フレームを装着するこのレスポンダは、以下の 3 種類です。
SFYResponder::SetFrame 関数の内部では、 コンテントレスポンダの実領域をフレーム余白領域のサイズだけ拡大した領域をアタッチメントフレームの実領域に設定する処理も行います。 そのため、コンテントレスポンダの実領域の設定は、 SFYResponder::SetFrame 関数の呼び出しよりも前に行うことも可能です。
装着するフレームは、 SFYResponder::SetState 関数を使用して、 可視、活性、操作可能、フォーカスの状態フラグ値を true に設定します。
各々のレスポンダは以下のフレームイベントを受信します。
なお、この関数を実行する前にこのレスポンダにアタッチメントフレームが既に装着されていた場合、 そのアタッチメントフレームは通常のフレームに戻り、他のレスポンダに装着可能になります。
コンテントレスポンダからアタッチメントフレームをクリアする方法 | |
---|---|
コンテントレスポンダからアタッチメントフレームをクリアするには、 SFYResponder::SetFrame関数の引数に SFYResponderSmp::EmptyInstance() を指定します。 もしくは、SFYResponder::Terminate 関数を呼び出してアタッチメントフレームを閉じます。 このとき、 コンテントレスポンダは フレームイベント [SFXEvent(SFEVT_RESPONDER_FRAME, SFP16_FRAME_FRAME, null)]、 アタッチメントフレームは フレームイベント [SFXEvent(SFEVT_RESPONDER_FRAME, SFP16_FRAME_CONTENT, null)]を受信します。 |
アタッチメントフレームとコンテントレスポンダについて | |
---|---|
アタッチメントフレームは、 SFYResponder::SetParent 関数を使用して、 他のレスポンダの親レスポンダや 子レスポンダに設定できません。 アタッチメントフレームには、別のフレームを装着することもできません。 また、アタッチメントフレームはコンテントレスポンダ以外の他のレスポンダに装着することもできません。 アタッチメントフレームの親子や姉妹の関係は、以下のように内部で自動的に管理されます。 アタッチメントフレームとコンテントレスポンダは同じ親レスポンダを持つ姉妹レスポンダです。 コンテントレスポンダは常にアタッチメントフレームよりも 1 つだけ姉であるように管理されています。 その結果、コンテントレスポンダの外枠としてアタッチメントフレームが描画されます。 コンテントレスポンダかアタッチメントフレームの何れか一方で実領域の設定を行うと、 もう片方の実領域は設定された実領域からアタッチメントフレームの SFYResponder::GetSuitableMargin 関数の戻り値であるフレーム余白領域のサイズだけ拡大または縮小して自動的に設定されます。 SFYResponder::ToFront 関数を使用してコンテントレスポンダを最前面に移動すると、 アタッチメントフレームもそれに付随して自動的に最前面に移動します。 逆に、この関数を呼び出してアタッチメントフレームを最前面へ移動しようとしても、 何も起こりません。 このレスポンダがアタッチメントフレーム / コンテントレスポンダであるかどうかの判定には、 SFYResponder::IsFrame / SFYResponder::HasFrame 関数を利用します。 状態と配信エンジンの観点では、 アタッチメントフレームはコンテントレスポンダの子レスポンダとして振舞います。 アタッチメントフレームはコンテントレスポンダの状態を継承します。 例えば、コンテントレスポンダの可視状態を OFF にすると、 自動的にアタッチメントフレームの可視状態も OFF となり、アタッチメントフレームは見えなくなります。 また、イベントは、 アタッチメントフレームをコンテントレスポンダの 1 番目の子レスポンダとみなして配信されます。 SFYResponder::Terminate 関数によりコンテントレスポンダを終了すると、 アタッチメントフレームはコンテントレスポンダから切り離され、 他のレスポンダに装着可能な通常のフレームに戻ります。 |
ウィンドウにフレームを装着/クリアするコードは、以下の通りです。
SFZWindowSmp _window; // ウィンドウ SFZTitleBevelFrameSmp _frame; // フレーム SFCError error; // エラー値 // フレームを生成する if ((_frame = SFZTitleBevelFrame::NewInstance(&error)) != null) { // フレームの状態を「可視+活性+操作可能+フォーカス」にまとめて設定する _frame->SetState(true, true, true, true); ... } // ウィンドウを生成する if ((_window = SFZWindow::NewInstance(&error)) != null) { ... // ウィンドウにフレームを設定する if ((error = _window->SetFrame(_frame)) == SFERR_NO_ERROR) { ... } // ウィンドウのフレームをクリアする if ((error = _window->SetFrame(SFYResponderSmp::EmptyInstance())) == SFERR_NO_ERROR) { ... } }
SFYResponder::GetFrame | SFYResponder::HasFrame | SFYResponder::IsFrame | SFYResponder::SetParent | SFYResponder::SetRealBound | SFYResponder::Terminate | SFYResponder::Invalidate | SFYRenderer | SFYDistributer | SFYFrame | SFXEvent | フレーム | アタッチメントフレームとコンテントレスポンダ | フレームイベント | 親レスポンダ | 子レスポンダ | 実領域 | 状態 | 配信エンジン
この関数は、 指定された値をこのレスポンダのIDに設定します。
デフォルト値: 0
ID | |
---|---|
ID とは、 レスポンダのインスタンス識別子として自由に設定できる 32ビット符号なし整数(UInt32 型)のことです。 |
ID の重複 | |
---|---|
異なるレスポンダに同一の ID を設定できます。 ID は変更可能です。 |
予約 ID | |
---|---|
65536 以上の ID は、SophiaFramework UNIVERSE が内部で利用しますので、 この範囲の ID を使用しないことを推奨します。 |
以下は、テキストボタンコントロールに ID を設定し、 ID を使用してテキストボタンコントロールを検索するコードです。
SFCError USRResponder::MakeButton(Void) { SFZTextButtonControlSmp button; SFCError error(SFERR_NO_ERROR); if ((button = SFZTextButtonControl::NewInstance(&error)) != null) { if ((error = button->SetParent(GetThis())) == SFERR_NO_ERROR) { // テキストボタンコントロールの ID を 100 に設定する button->SetID(100); ... } } return error; } SFZTextButtonControlSmp USRResponder::GetButton(Void) const { // ID を利用すればクラス変数を用いてレスポンダを管理しなくてもよい // ID が 100 であるテキストボタンコントロールを取得する return static_pointer_cast<SFZTextButtonControl>(GetChildFront(100)); }
[ public ] SFCError SetParent( SFYResponderSmpConstRef param // 設定するレスポンダ );
この関数は、 指定されたレスポンダをこのレスポンダの親レスポンダに設定します。
このレスポンダは、param 引数に指定した親レスポンダが所属する レスポンダツリーに接続されます。
各々のレスポンダは以下の親子イベントを受信します。
このレスポンダまたは子孫レスポンダの状態の ON / OFF が変化する場合、 該当するレスポンダは変化する状態に応じて以下の状態イベントを受信します。
状態の ON / OFF | |
---|---|
状態の ON / OFF の詳細については状態を参照してください。 |
親レスポンダとして指定できないレスポンダ | |
---|---|
param 引数にこのレスポンダ自身またはアタッチメントフレームを指定すると、SFERR_INVALID_PARAM が返ります。 このレスポンダがアタッチメントフレームである場合、SFERR_INVALID_STATE が返ります。 ※ アタッチメントフレームの詳細については、 アタッチメントフレームとコンテントレスポンダを参照してください。 |
親レスポンダをクリアする方法 | |
---|---|
親レスポンダを設定した直後、 このレスポンダは同じ親を持つ姉妹レスポンダの中で最背面に配置されます。 最前面に移動するには SFYResponder::ToFront 関数を呼び出す必要があります。 |
注意 | |
---|---|
親レスポンダを持たないようにするには、 引数に SFYResponderSmp::EmptyInstance() を指定します。 もしくは、SFYResponder::Terminate 関数を呼び出して親レスポンダを終了します。 このとき、 このレスポンダは 親子イベント [SFXEvent(SFEVT_RESPONDER_OWNER, SFP16_OWNER_PARENT, null)]、 親レスポンダは 親子イベント [SFXEvent(SFEVT_RESPONDER_OWNER, SFP16_OWNER_UNREGISTER, このレスポンダ)]を受信します。 |
スマートポインタ | |
---|---|
この関数を実行すると、レスポンダの参照カウントが 1 だけ増えます。 そのため、下記の例にあるようにこの状態でレスポンダを保持する変数に別のレスポンダのスマートポインタを代入しても元のレスポンダの参照カウントは 1 以上なので、 代入操作によってこのレスポンダがメモリから解放されることはありません。 SFZWindowSmp window; SFCError error(SFERR_NO_ERROR); ..... window = SFZWindow::NewInstance(&error); // レスポンダ A を作成し、window に代入する[A の参照カウントは 1] window->SetParent(GetThis());// レスポンダ A の親を設定する[A の参照カウントは 2] if (error == SFERR_NO_ERROR) { window = SFZWindow::NewInstance(&error);// レスポンダ B を作成し、window に代入する[A の参照カウントは 1] } // A の参照カウントは 1 なので、A は解放されない // 解放するには Terminate 関数を呼び出すか、A の親レスポンダが解放されるのを待つ |
以下は、親レスポンダを設定するコードです。
SFCError USRResponder::SetButtonParent(Void)
{
SFZWindowSmp window;
SFZTextButtonControlSmp button;
SFCError error(SFERR_NO_ERROR);
...
// button の親レスポンダを window に設定する
if ((error = button->SetParent(window)) == SFERR_NO_ERROR) {
...
}
return error;
}
以下は、親レスポンダをクリアするコードです。
SFCError USRResponder::ClearButtonParent(Void)
{
SFZTextButtonControlSmp button;
SFCError error(SFERR_NO_ERROR);
...
// button の親レスポンダをクリアするには SFYResponderSmp::EmptyInstance() を設定する
if ((error = button->SetParent(SFYResponderSmp::EmptyInstance())) == SFERR_NO_ERROR) {
...
}
return error;
}
SFYResponder::GetParent | SFYResponder::SetFrame | SFYResponder::ToFront | SFYResponder::Invalidate | SFXEvent | 親レスポンダ | 姉妹レスポンダ | レスポンダツリー | アタッチメントフレームとコンテントレスポンダ | 状態 | 親子イベント[SFEVT_RESPONDER_OWNER] | 状態イベント[SFEVT_RESPONDER_STATE]
この関数は、 指定された透過属性をこのレスポンダに設定します。
デフォルト値: false
視覚的なデザインに透過部分があるときは、透過属性を true に設定します。
透過属性が true に設定されている場合、 SFYWidget::SetBackgroundColor 関数で設定した背景色 (デフォルト:白色)で領域の背景は塗り潰されません。
例外 | |
---|---|
ルートレスポンダ の透過属性を true に設定しても、 背景は透過になりません (SFYWidget::SetBackgroundColor 関数で設定した背景色で塗り潰されます)。 SFYApplication クラスが内部に保持しているルートでは、 透過属性を true に設定しても、その背景はSFYWidget::SetBackgroundColor 関数で設定した色 (デフォルト: 白色)で塗り潰されます。 |
透過属性が true に設定されているクラス | |
---|---|
以下のクラスでは、透過属性がデフォルトで true に設定されています。 SFYImageWidget | SFYSingleTextWidget | SFYSingleEditWidget | SFYMultipleTextWidget | SFYMultipleEditWidget | SFZSingleTextLabelControl | SFZSingleEditLabelControl | SFZMultipleTextLabelControl | SFZMultipleEditLabelControl | SFZImageLabelControl | SFZCheckboxControl | SFZRadiobuttonControl |
SFYResponder::GetPropertyTransparent | SFYResponder::SetProperty | SFYWidget::SetBackgroundColor| SFYResponder::Invalidate | 属性 | ルートレスポンダ | ルート
[ public ] Void SetRealBound( SFXRectangleConstRef param // 設定する値 );
この関数は、 指定された領域をこのレスポンダの実領域に設定します。
デフォルト値: SFXRectangle(0, 0, 0, 0)
実領域が変更されたとき、 このレスポンダは領域イベント[SFEVT_RESPONDER_BOUND] [SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_REAL, 変更後の実領域)] を受信します。
仮想領域も変更された場合は、 領域イベント[SFEVT_RESPONDER_BOUND] [SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL, 変更後の仮想領域)] も受信します。
領域イベント[SFEVT_RESPONDER_BOUND]の処理 | |
---|---|
SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_REAL, 変更後の実領域)、 SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL, 変更後の仮想領域) イベントのハンドラは、 それぞれ SFYWidget::HandleBoundReal、 SFYWidget::HandleBoundVirtual 仮想関数をオーバーライドして実装します。 あるいは、 領域イベント専用ハンドラを定義、実装してレスポンダに登録する方法も可能です。 |
実領域と仮想領域 | |||||
---|---|---|---|---|---|
SFYResponder::SetRealBound 関数を使用して実領域を小さくすると、 仮想領域は実領域よりも大きくなります。
|
アタッチメントフレーム / コンテントレスポンダの場合 | |
---|---|
アタッチメントフレームまたはコンテントレスポンダの何れか一方の実領域を設定すれば、 もう片方の実領域はアタッチメントフレームのフレーム余白領域を基に計算して自動的に設定されます。 アタッチメントフレーム / コンテントレスポンダについては、 アタッチメントフレームとコンテントレスポンダを参照してください。 |
[非推奨(廃止予定)]グローバル領域イベントについて | |
---|---|
この関数の処理により、 このレスポンダとその子孫レスポンダは、 可視状態にある時に限り、 SFYResponder::Render 関数内で実際に画面を再描画する直前に 領域イベント[SFEVT_RESPONDER_BOUND] [SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_GLOBAL, グローバル領域)] を受信します (不可視状態の場合はこのイベントを受信しません)。 SFYResponder::Render 関数は、 イベントループの最後に SFYApplication::HandleEvent 関数内から自動的に呼び出されます。 (※)なお、グローバル領域イベントは廃止予定ですので、 このイベントを処理しないようにしてください。 描画ハンドラの処理などでグローバル領域が必要な場合は、 SFYResponder::GetGlobalBound 関数を呼び出して取得してください。 |
SFYResponder::GetRealBound | SFYResponder::SetVirtualBound | SFYWidget::HandleBoundReal | SFYWidget::HandleBoundVirtual | SFYWidget::HandleBoundGlobal | SFYResponder::SetFrame | SFYResponder::GetSuitableMargin | SFYResponder::Distribute | SFYResponder::Invalidate | SFXRectangle | SFXEvent | 実領域 | 仮想領域 | ローカル領域 | グローバル領域 | 状態 | イベントループ | アタッチメントフレームとコンテントレスポンダ | 領域イベント[SFEVT_RESPONDER_BOUND]
この関数は、 指定された値をこのレスポンダのリファレンスに設定します。
デフォルト値: null
リファレンス | |
---|---|
リファレンスとは、 レスポンダのインスタンス識別子として自由に設定できる 4 バイト値(VoidPtr 型)のことです。 |
以下は、テキストボタンコントロールを識別するための番号をリファレンス値として設定し取得するためのコードです。
SFZTextButtonControlSmp _button; SInt32 i; // 10 個のテキストボタンコントロールを作成し番号(リファレンス値)を設定する for (i = 0; i < 10; ++i) { // テキストボタンコントロールを作成する if ((_button = SFZTextButtonControl::NewInstance(&error)) != null) { // テキストボタンコントロールの親 GetThis() に設定する error = _button->SetParent(GetThis()); if (error == SFERR_NO_ERROR) { // テキストボタンコントロール識別用番号を設定する _button->SetReference(reinterpret_cast<VoidPtr>(i)); } } } ... // テキストボタンコントロール識別用番号を取得する SInt32 number = reinterpret_cast<SInt32>(_button->GetReference());
[ public ] Void SetRenderer( SFYRendererPtr param // 設定する値 );
この関数は、 指定された描画エンジンこのレスポンダにを設定します。
注意 | |
---|---|
描画エンジンは、 描画対象のレスポンダツリーの ルートレスポンダに設定します。 なお、SFYApplication::SFYApplication コンストラクタの処理により、 SFYApplication クラスが内部で保持するルートに描画エンジンが設定されています。 通常、この関数を呼び出す必要はありません。 |
SFYResponder::GetRenderer | SFYApplication::SFYApplication | SFYResponder::Invalidate | SFYApplication | SFZRoot | 描画エンジン | ルート
[ public ] Void SetState( Bool visible // 可視状態の値 Bool active // 活性状態の値 Bool enable // 操作可能状態の値 Bool focus // フォーカス状態の値 );
この関数は、 指定された値をこのレスポンダの可視、活性、操作可能、フォーカスの各状態フラグにまとめて設定します。
デフォルト値 | |
---|---|
可視、活性、操作可能、フォーカスの各状態のフラグの初期値は false です。 |
フォーカス状態フラグについて | |
---|---|
この関数を呼び出す直前、 このレスポンダの可視、活性、操作可能、フォーカスのすべての状態のフラグ値が true であったとします (このレスポンダがフォーカスを持っていたとします)。 このとき、 visible、active、または enable 引数のうち 1 つ以上の引数に false を指定した場合、 focus 引数に true を指定していても、 このレスポンダのフォーカス状態フラグの値は強制的に false に設定されます。 そして、もし存在すれば、1 つだけ背面にある操作可能な姉妹レスポンダ (存在しない場合は、1 つだけ前面にある操作可能な姉妹レスポンダ) のフォーカス状態フラグが false から true に変更されます (フォーカスはその姉妹レスポンダに移動します)。 ※1. フォーカス状態のフラグ値を true に設定するには、 visible / active / enable / focus のすべての引数に true を指定してこの関数を呼び出す必要があります。 このとき、 フォーカス状態のフラグが true である姉妹レスポンダが存在した場合、 そのフラグは 強制的に false に変更されます (その姉妹レスポンダはフォーカスされない状態になります)。 ※2. 操作可能なレスポンダとは、 可視、活性、操作可能の状態フラグの値が true であるレスポンダのことです。 ※3. 可視、活性、操作可能の状態フラグは、 この関数の対応する各引数に指定した値が無条件にそのまま設定されます。 |
SetState 関数 | |
---|---|
SFYResponder::SetState 関数は、 SFYResponder::SetStateVisible / SFYResponder::SetStateActive / SFYResponder::SetStateEnable / SFYResponder::SetStateFocus 関数をまとめて実行するのと同じです。 個別に状態を設定するよりも効率良く 4 つの状態をまとめて設定できます。 状態の ON / OFF が変化する場合、 該当するこのレスポンダや子孫レスポンダは状態イベントを受信します。 詳細は、 SFYResponder::SetStateVisible / SFYResponder::SetStateActive / SFYResponder::SetStateEnable / SFYResponder::SetStateFocus 関数の解説を参照してください。 有効状態は SFYResponder::Initialize / SFYResponder::Terminate 関数を呼び出したときに true / false (有効 / 無効)に設定されます。 |
以下は、レスポンダの状態を設定するコードです。
Void USRResponder::SetState(Void) { // 可視、活性、操作可能、フォーカスの各状態のフラグを true に設定し、 // このレスポンダのフォーカス状態を ON にする SetState(true, true, true, true); // ※ 親レスポンダのフォーカス状態は ON であると仮定 // 可視状態のフラグを false に設定する(このレスポンダを不可視状態 OFF にする) SetStateVisible(false); // ※ このとき、活性状態と操作可能状態のフラグ値は true のままだが、 // フォーカス状態フラグ値は自動的に true から false に変更されることに注意! // そして、もし存在すれば、1 つだけ背面にある操作可能な姉妹レスポンダ(存在しない場合は、1 つだけ前面にある操作可能な姉妹レスポンダ)の // フォーカス状態フラグが false から true に変更される(その姉妹レスポンダにフォーカスが移動する) // 可視状態のフラグを true に設定すると、操作可能状態 ON になるが、 // フォーカス状態フラグ値は false のままなので、フォーカス状態は OFF SetStateVisible(true); // フォーカス状態を ON にするには、フォーカス状態フラグを true に設定する必要がある SetStateFocus(true); return; }
SFYResponder::SetStateVisible | SFYResponder::SetStateActive | SFYResponder::SetStateEnable | SFYResponder::SetStateFocus | SFYResponder::GetStateVisible | SFYResponder::GetStateActive | SFYResponder::GetStateEnable | SFYResponder::GetStateFocus | SFYResponder::Initialize | SFYResponder::Terminate | SFYResponder::Invalidate | SFYResponder::SetParent | SFXEvent | 状態 | 状態イベント[SFEVT_RESPONDER_STATE] | 状態イベント専用ハンドラ[XANDLER_DECLARE_VOIDSTATE]
この関数は、 指定された値をこのレスポンダの活性状態フラグに設定します。
デフォルト値: false
状態の ON / OFF が変化する場合、 該当するこのレスポンダや子孫レスポンダは下記の状態イベントを受信します。
注意 | |
---|---|
レスポンダが実際に活性状態であるとき、 活性状態は ON であると言います。 |
活性状態が ON になるための条件 | |
---|---|
|
状態の ON / OFF | |
---|---|
詳細は状態を参照してください。 |
このレスポンダおよび子孫レスポンダ内での状態イベント受信順序 | |
---|---|
状態イベントの P32 パラメータが true の場合(状態 が OFF → ON に変化するとき): 背面から前面のレスポンダの順、同一レスポンダ内では優先順位の高い状態から低い状態の順に受信します。 状態イベントの P32 パラメータが false の場合(状態 が ON → OFF に変化するとき): 前面から背面のレスポンダの順、同一レスポンダ内では優先順位の低い状態から高い状態の順に受信します。 状態の優先順位は、 有効状態 > 可視状態 > 活性状態 > 操作可能状態 > フォーカス状態 の順になります(有効状態が一番高い)。 |
フォーカス状態フラグについて | |
---|---|
この関数を呼び出す直前、 このレスポンダの可視、活性、操作可能、フォーカスのすべての状態のフラグ値が true であったとします (このレスポンダがフォーカスを持っていたとします)。 param 引数に false を指定してこの関数を呼び出すと、 このレスポンダのフォーカス状態フラグの値は強制的に false に変更されます。 そして、もし存在すれば、1 つだけ背面にある操作可能な姉妹レスポンダ (存在しない場合は、1 つだけ前面にある操作可能な姉妹レスポンダ) のフォーカス状態フラグが false から true に変更されます (その姉妹レスポンダにフォーカスが移動します)。 この直後に、 再びこのレスポンダをフォーカスされた状態にするには、 param 引数に true を指定してこの関数を呼び出すだけでなく、 param 引数に true を指定して SFYResponder::SetStateFocus 関数を呼び出してフォーカス状態フラグを true に設定する必要があります。 ※1. この関数の実行により、可視と操作可能の状態フラグの値が変化することはありません。 ※2. 操作可能なレスポンダとは、 可視、活性、操作可能の状態フラグの値が true であるレスポンダのことです。 |
SFYResponder::SetState | SFYResponder::GetStateActive | SFYResponder::Invalidate | SFXEvent | 状態 | 状態イベント[SFEVT_RESPONDER_STATE]
この関数は、 指定された値をこのレスポンダの操作可能状態フラグに設定します。
デフォルト値: false
状態の ON / OFF が変化する場合、 該当するこのレスポンダや子孫レスポンダは下記の状態イベントを受信します。
注意 | |
---|---|
レスポンダが実際に操作可能であるとき、 操作可能状態は ON であると言います。 |
操作可能状態が ON になるための条件 | |
---|---|
|
状態の ON / OFF | |
---|---|
詳細は状態を参照してください。 |
このレスポンダおよび子孫レスポンダ内での状態イベント受信順序 | |||||
---|---|---|---|---|---|
状態イベントの P32 パラメータが true の場合(状態 が OFF → ON に変化するとき): 背面から前面のレスポンダの順、同一レスポンダ内では優先順位の高い状態から低い状態の順に受信します。 状態イベントの P32 パラメータが false の場合(状態 が ON → OFF に変化するとき): 前面から背面のレスポンダの順、同一レスポンダ内では優先順位の低い状態から高い状態の順に受信します。
|
フォーカス状態フラグについて | |
---|---|
この関数を呼び出す直前、 このレスポンダの可視、活性、操作可能、フォーカスのすべての状態のフラグ値が true であったとします (このレスポンダがフォーカスを持っていたとします)。 param 引数に false を指定してこの関数を呼び出すと、 このレスポンダのフォーカス状態フラグの値は強制的に false に変更されます。 そして、もし存在すれば、1 つだけ背面にある操作可能な姉妹レスポンダ (存在しない場合は、1 つだけ前面にある操作可能な姉妹レスポンダ) のフォーカス状態フラグが false から true に変更されます (その姉妹レスポンダにフォーカスが移動します)。 この直後に、 再びこのレスポンダをフォーカスされた状態にするには、 param 引数に true を指定してこの関数を呼び出すだけでなく、 param 引数に true を指定して SFYResponder::SetStateFocus 関数を呼び出してフォーカス状態フラグを true に設定する必要があります。 ※1. この関数の実行により、可視と活性の状態フラグの値が変化することはありません。 ※2. 操作可能なレスポンダとは、 可視、活性、操作可能の状態フラグの値が true であるレスポンダのことです。 |
SFYResponder::GetStateEnable | SFYResponder::SetState | SFYResponder::Invalidate | SFXEvent | 状態 | 状態イベント[SFEVT_RESPONDER_STATE]
この関数は、 指定された値をこのレスポンダのフォーカス状態フラグに設定します。
デフォルト値: false
注意 | |
---|---|
このレスポンダの可視、活性、または操作可能の状態フラグの値が false であるとき (フォーカス状態フラグの値は false)、 param 引数に true を指定してこの関数を呼び出しても、 フォーカス状態フラグは true に設定されません。 このレスポンダの可視、活性、操作可能の状態フラグの値がすべて true である場合に限り、 フォーカス状態フラグは true に設定されます。 |
状態の ON / OFF が変化する場合、 該当するこのレスポンダや子孫レスポンダは下記の状態イベントを受信します。
注意 | |
---|---|
レスポンダが実際にフォーカスされているとき、 フォーカス状態は ON であると言います。 |
フォーカス状態が ON になるための条件 | |
---|---|
|
状態の ON / OFF | |
---|---|
詳細は状態を参照してください。 |
このレスポンダおよび子孫レスポンダ内での状態イベント受信順序 | |||||
---|---|---|---|---|---|
状態イベントの P32 パラメータが true の場合(状態 が OFF → ON に変化するとき): 背面から前面のレスポンダの順、同一レスポンダ内では優先順位の高い状態から低い状態の順に受信します。 状態イベントの P32 パラメータが false の場合(状態 が ON → OFF に変化するとき): 前面から背面のレスポンダの順、同一レスポンダ内では優先順位の低い状態から高い状態の順に受信します。
|
フォーカス状態のフラグ値について | |
---|---|
この関数を呼び出す直前、 このレスポンダの可視、活性、操作可能、フォーカスのすべての状態のフラグ値が true であったとします (このレスポンダがフォーカスを持っていたとします)。 このとき、 SFYResponder::SetStateVisible、 SFYResponder::SetStateActive、または SFYResponder::SetStateEnable 関数を呼び出してフォーカス状態以外の状態フラグを false に設定した場合、 このレスポンダのフォーカス状態フラグの値は強制的に false に変更されます (このレスポンダは、フォーカスされていない状態になります)。 そして、もし存在すれば、1 つだけ背面にある操作可能な姉妹レスポンダ (存在しない場合は、1 つだけ前面にある操作可能な姉妹レスポンダ) のフォーカス状態フラグが false から true に変更されます (フォーカスはその姉妹レスポンダに移動します)。 この直後、 再びこのレスポンダをフォーカスされた状態にするには、 上の関数呼び出しで変更した状態のフラグを true に戻すだけでなく、 SFYResponder::SetStateFocus 関数を呼び出してこのレスポンダのフォーカス状態フラグも true に設定する必要があります。 ※1. フォーカス状態フラグを true に設定するには、 SFYResponder::SetStateFocus 関数を呼び出す前に、 可視、活性、操作可能の状態フラグを true に設定しておく必要があります。 もしくは、すべての引数に true を指定して SFYResponder::SetState 関数を呼び出します。 ※2. 操作可能なレスポンダとは、 可視、活性、操作可能の状態フラグの値が true であるレスポンダのことです。 |
SetParent 関数と SetStateFocus 関数の呼び出し順序について | |
---|---|
SFYResponder::SetStateFocus 関数を呼び出す前に、 必ず SFYResponder::SetParent 関数を呼び出して親レスポンダを設定してください。 この関数呼び出しの順序が逆になると、 同じ姉妹レスポンダ間でフォーカス状態になれるレスポンダが 2 つ以上になる不具合が生じる可能性があります。 SFYResponder::SetStateFocus 関数では、 同じ姉妹レスポンダ間では、フォーカス状態フラグが true になるレスポンダが 1 つだけになるように制御されています。 |
以下は、レスポンダの状態を設定するコードです。
Void USRResponder::SetState(Void) { // 可視、活性、操作可能、フォーカスの各状態のフラグを true に設定し、 // このレスポンダのフォーカス状態を ON にする SetState(true, true, true, true); // ※ 親レスポンダのフォーカス状態は ON であると仮定 // 可視状態のフラグを false に設定する(このレスポンダを不可視状態 OFF にする) SetStateVisible(false); // ※ このとき、活性状態と操作可能状態のフラグ値は true のままだが、 // フォーカス状態フラグ値は自動的に true から false に変更されることに注意! // そして、もし存在すれば、1 つだけ背面にある操作可能な姉妹レスポンダ(存在しない場合は、1 つだけ前面にある操作可能な姉妹レスポンダ)の // フォーカス状態フラグが false から true に変更される(その姉妹レスポンダにフォーカスが移動する) // 可視状態のフラグを true に設定すると、操作可能状態 ON になるが、 // フォーカス状態フラグ値は false のままなので、フォーカス状態は OFF SetStateVisible(true); // フォーカス状態を ON にするには、フォーカス状態フラグを true に設定する必要がある SetStateFocus(true); return; }
SFYResponder::GetStateFocus | SFYResponder::SetState | SFYResponder::Invalidate | SFXEvent | 状態 | 状態イベント[SFEVT_RESPONDER_STATE]
この関数は、 指定された値をこのレスポンダの可視状態フラグに設定します。
デフォルト値: false
状態の ON / OFF が変化する場合、 該当するこのレスポンダや子孫レスポンダは下記の状態イベントを受信します。
注意 | |
---|---|
レスポンダが実際に見えるとき、 可視状態は ON であると言います。 |
可視状態が ON になるための条件 | |
---|---|
|
有効状態が ON になるための条件 | |
---|---|
|
状態の ON / OFF | |
---|---|
詳細は状態を参照してください。 |
このレスポンダおよび子孫レスポンダ内での状態イベント受信順序 | |||||
---|---|---|---|---|---|
状態イベントの P32 パラメータが true の場合(状態 が OFF → ON に変化するとき): 背面から前面のレスポンダの順、同一レスポンダ内では優先順位の高い状態から低い状態の順に受信します。 状態イベントの P32 パラメータが false の場合(状態 が ON → OFF に変化するとき): 前面から背面のレスポンダの順、同一レスポンダ内では優先順位の低い状態から高い状態の順に受信します。
|
フォーカス状態フラグについて | |
---|---|
この関数を呼び出す直前、 このレスポンダの可視、活性、操作可能、フォーカスのすべての状態のフラグ値が true であったとします (このレスポンダがフォーカスを持っていたとします)。 param 引数に false を指定してこの関数を呼び出すと、 このレスポンダのフォーカス状態フラグの値は強制的に false に変更されます。 そして、もし存在すれば、1 つだけ背面にある操作可能な姉妹レスポンダ (存在しない場合は、1 つだけ前面にある操作可能な姉妹レスポンダ) のフォーカス状態フラグが false から true に変更されます (その姉妹レスポンダにフォーカスが移動します)。 この直後に、 再びこのレスポンダをフォーカスされた状態にするには、 param 引数に true を指定してこの関数を呼び出すだけでなく、 param 引数に true を指定して SFYResponder::SetStateFocus 関数を呼び出してフォーカス状態フラグを true に設定する必要があります。 ※1. この関数の実行により、活性と操作可能のフラグの値が変化することはありません。 ※2. 操作可能なレスポンダとは、 可視、活性、操作可能の状態フラグの値が true であるレスポンダのことです。 |
以下は、レスポンダの状態を設定するコードです。
Void USRResponder::SetState(Void) { // 可視、活性、操作可能、フォーカスの各状態のフラグを true に設定し、 // このレスポンダのフォーカス状態を ON にする SetState(true, true, true, true); // ※ 親レスポンダのフォーカス状態は ON であると仮定 // 可視状態のフラグを false に設定する(このレスポンダを不可視状態 OFF にする) SetStateVisible(false); // ※ このとき、活性状態と操作可能状態のフラグ値は true のままだが、 // フォーカス状態フラグ値は自動的に true から false に変更されることに注意! // そして、もし存在すれば、1 つだけ背面にある操作可能な姉妹レスポンダ(存在しない場合は、1 つだけ前面にある操作可能な姉妹レスポンダ)の // フォーカス状態フラグが false から true に変更される(その姉妹レスポンダにフォーカスが移動する) // 可視状態のフラグを true に設定すると、操作可能状態 ON になるが、 // フォーカス状態フラグ値は false のままなので、フォーカス状態は OFF SetStateVisible(true); // フォーカス状態を ON にするには、フォーカス状態フラグを true に設定する必要がある SetStateFocus(true); return; }
SFYResponder::GetStateVisible | SFYResponder::SetState | SFYResponder::Invalidate | SFXEvent | 状態 | 状態イベント[SFEVT_RESPONDER_STATE]
この関数は、 指定された値をこのレスポンダのタイプに設定します。
デフォルト値: 親クラスのタイプ
タイプ | |
---|---|
タイプとは、 レスポンダのクラス識別子として自由に設定できる 4 文字リテラル (four_char_code マクロで定義します)のことです。 |
以下は、USRResponder クラスのタイプを設定するコードです。
USRResponder::USRResponder(Void) static_throws { if (static_try()) { // タイプは必ずこの場所で設定する // このようにすると親クラスのコンストラクタ内でエラーが発生した場合は // 親クラスのタイプが保持され、自クラスのコンストラクタ内でエラーが // 発生した場合は自クラスのタイプが設定されるようになる // 外部からこのクラスを利用する場合にエラーの発生個所を特定しやすくなる SetType(four_char_code('U', 'R', 'S', 'P')); // その他の初期化処理を記述する ... } }
[ public ] Void SetVirtualBound( SFXRectangleConstRef param // 設定する値 );
この関数は、 指定された領域をこのレスポンダの仮想領域に設定します。
デフォルト値: SFXRectangle(0, 0, 0, 0)
Tip | |
---|---|
[ 仮想領域 ≧ 実領域 ] なので、[ 仮想領域 = 実領域 ] のときに実領域を大きくすると、 仮想領域もそれに合わせて大きくなります。 |
仮想領域が変更されたとき、 このレスポンダは領域イベント[SFEVT_RESPONDER_BOUND] [SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL, 変更後の仮想領域)] を受信します。
領域イベント[SFEVT_RESPONDER_BOUND]の処理 | |
---|---|
SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL, 変更後の仮想領域) イベントの処理は、 それぞれ SFYWidget::HandleBoundVirtual 仮想関数をオーバーライドして実装します。 あるいは、 領域イベント専用ハンドラを定義、実装してレスポンダに登録する方法も可能です。 |
[非推奨(廃止予定)]グローバル領域イベントについて | |
---|---|
この関数の処理により、 このレスポンダとその子孫レスポンダは、 可視状態にある時に限り、 SFYResponder::Render 関数内で実際に画面を再描画する直前に 領域イベント[SFEVT_RESPONDER_BOUND] [SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_GLOBAL, グローバル領域)] を受信します (不可視状態の場合はこのイベントを受信しません)。 SFYResponder::Render 関数は、 イベントループの最後に SFYApplication::HandleEvent 関数内から自動的に呼び出されます。 (※)なお、グローバル領域イベントは廃止予定ですので、 このイベントを処理しないようにしてください。 描画ハンドラの処理などでグローバル領域が必要な場合は、 SFYResponder::GetGlobalBound 関数を呼び出して取得してください。 |
SFYResponder::GetVirtualBound | SFYResponder::SetRealBound | SFYWidget::HandleBoundVirtual | SFYWidget::HandleBoundGlobal | SFYResponder::Distribute | SFXRectangle | SFXEvent | 仮想領域 | 実領域 | ローカル領域 | グローバル領域 | 状態 | イベントループ | 領域イベント[SFEVT_RESPONDER_BOUND] | 領域イベント専用ハンドラ[XANDLER_DECLARE_VOIDBOUND] | コールバック型
[ public, const ] SFCError Snapshot( SFBBitmapSmpConstRef bitmap // 保存先ビットマップ );
この関数は、 デバイス画面保存用ビットマップからこのレスポンダとレスポンダ空間との交差領域分のイメージを指定されたビットマップに転送します。
交差領域の前面に他のレスポンダが重なる場合、そのレスポンダのイメージもビットマップに転送されます。
[ public ] Void Terminate(Void);
この関数は、 以下の手順でこのレスポンダの終了処理を行います。
アタッチメントフレームまたはコンテントレスポンダの終了 | |
---|---|
このレスポンダが SFYResponder::SetFrame 関数によりアタッチメントフレームが装着されたコンテントレスポンダである場合は、 アタッチメントフレームはコンテントレスポンダから切り離されて見えなくなり、 他のレスポンダに装着可能な通常のフレームに戻ります。 逆に、このレスポンダがアタッチメントフレームである場合は、 アタッチメントフレームだけが見えなくなり、以後使用できなくなります。 コンテントレスポンダはそのままです。 このとき、 各々のレスポンダは以下のフレームイベントを受信します。 アタッチメントフレーム、コンテントレスポンダ共に親子イベントを受信しません。 ※ アタッチメントフレームの詳細については、 アタッチメントフレームとコンテントレスポンダを参照してください。 |
Tip | |
---|---|
SFYResponder::Terminate 関数は、 レスポンダの参照カウントが 0 になったタイミングで自動的に呼び出されます。 そのため、ほとんどのレスポンダではこの関数を呼び出す必要はありません。 ダイアログやメニューなどのように参照カウントが 0 になる前にレスポンダを終了したい(閉じたい)ときに、 明示的に SFYResponder::Terminate 関数を呼び出して使います。 このとき、参照カウントはまだ 0 でないため、 この関数を実行した後もレスポンダはそのままヒープメモリに残ったままです。 強制的にヒープメモリから解放するには、 レスポンダを参照しているスマートポインタの変数に別のレスポンダを代入する、 あるいは、明示的に SFXResponderPointer::Release 関数を呼び出すなどして参照カウントを 0 にする必要があります。 |
状態イベントの発生 | |
---|---|
このレスポンダと子レスポンダとの親子関係を解消する前に、 一旦、子レスポンダのすべての状態フラグを false に設定します。 その結果、下記の該当する子孫レスポンダは下記の状態イベントを受信します。
子レスポンダとの親子関係を解消した後、子レスポンダのすべての状態フラグを元の状態に戻します。 その結果、子レスポンダを頂点とする新たなレスポンダツリーが作成されます。 通常、子レスポンダには、 配信エンジンが設定されていないので有効状態は OFF となります。 そのため、子孫レスポンダはすべての状態フラグの値が復元しても状態イベントを受信しません。 次に、このレスポンダの有効状態フラグが "false" に設定されたときに、 このレスポンダは状態イベント [SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_VALID, false)]を受信します。 また、これに伴う各種状態の変化に応じて下記の状態イベントを受信します。
|
親子イベントの発生 | |
---|---|
親子関係の解消に伴い、 親レスポンダと子レスポンダはそれぞれ下記の親子イベントを受信します。
|
子レスポンダの終了と解放 | |
---|---|
子レスポンダは、参照カウントが 0 になると、 SFYResponder::Terminate 関数が自動的に呼び出されて終了します。 そして、ヒープメモリからも解放されます。 通常、子レスポンダはこのレスポンダのクラス変数として保持されるので、 子レスポンダの参照カウントは、 このレスポンダがヒープメモリから解放されるタイミングで 0 になります。 |
注意 | |
---|---|
この関数を使用して終了したレスポンダに対して SFYResponder::Initialize 関数を呼び出して再び初期化することは禁止されています。 |
状態の ON / OFF | |
---|---|
状態の ON / OFF についての詳細は、 状態を参照してください。 |
以下は、ダイアログを閉じるコードです。
XANDLER_IMPLEMENT_VOIDRESULT(USRWindow, OnDialog, invoker, reason, result) { // invoker にはダイアログが渡される // reason には結果イベントの P16 値が渡される // result には 0 が渡される switch (reason) { case SFP16_RESULT_OK: // OK ボタン押下時、または操作キー押下時 ... invoker->Terminate(); // ダイアログを閉じる break; case SFP16_RESULT_CANCEL: // キャンセルボタン押下時 case SFP16_RESULT_ESCAPE: // ESCAPE キー押下時、または ScheduleTimer 関数で設定した時間が経過した時 invoker->Terminate(); // ダイアログを閉じる // この段階ではダイアログはヒープメモリ上にまだ残っている // 参照カウントが 0 になったときにヒープメモリから解放される // 強制的にヒープメモリから解放するには、ダイアログを参照するスマートポインタに別のダイアログを代入する、あるいは // 明示的に SFXResponderPointer::Release() を呼び出すなどして参照カウントを 0 にする必要がある break; default: break; } return; }
SFYResponder::Initialize | SFYResponder::SetFrame | SFYResponder::Invalidate | SFXEvent | レスポンダツリー | アタッチメントフレームとコンテントレスポンダ | 状態 | 配信エンジン | 状態イベント[SFEVT_RESPONDER_STATE] | 親子イベント[SFEVT_RESPONDER_OWNER] | フレームイベント
[ public ] Void ToBack(Void);
[ public ] Void ToBack( Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public ] Void ToBack( UInt32 id // ID );
[ public ] Void ToBack( UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
この関数は、 このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
このレスポンダが SFYResponder::SetFrame 関数によりアタッチメントフレームが装着されたコンテントレスポンダである場合は、 アタッチメントフレームも一緒に移動します。 逆に、このレスポンダがアタッチメントフレームである場合は、 アタッチメントフレームもコンテントレスポンダも移動しません(何も起こりません)。
※ アタッチメントフレームとコンテントレスポンダの詳細については、 アタッチメントフレームとコンテントレスポンダを参照してください。
親レスポンダは、 親子イベント [SFXEvent(SFEVT_RESPONDER_OWNER, SFP16_OWNER_ARRANGE, このレスポンダ)] を受信します。
Tip | |
---|---|
検索に含める姉妹レスポンダを ID、 可視、活性、操作可能、フォーカスの状態で制限できます。 なお、アタッチメントフレームは、検索の対象外です。 |
注意 | |
---|---|
この関数を実行した後、 このレスポンダは指定された条件の姉妹レスポンダのなかで一番下の妹レスポンダになります。 |
すべての姉妹レスポンダの中で最背面に移動する方法 ToBack(); ID = 128 の姉妹レスポンダの中で最背面に移動する方法 ToBack(128); 可視かつ活性な姉妹レスポンダの中で最背面に移動する方法(操作可能とフォーカスの状態は問わない) ToBack(true, true, false, false); 可視、活性かつ操作可能な姉妹レスポンダの中で最背面に移動する方法(フォーカスの状態は問わない) ToBack(true, true, true, false);
SFYResponder::ToFront | SFYResponder::ToNthBackward | SFYResponder::SetFrame | SFYResponder::Invalidate | SFXEvent | ID | 姉妹レスポンダ | アタッチメントフレームとコンテントレスポンダ | 状態 | 親子イベント[SFEVT_RESPONDER_OWNER]
[ public ] Void ToFront(Void);
[ public ] Void ToFront( Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public ] Void ToFront( UInt32 id // ID );
[ public ] Void ToFront( UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
この関数は、 このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
このレスポンダが SFYResponder::SetFrame 関数によりアタッチメントフレームが装着されたコンテントレスポンダである場合は、 アタッチメントフレームも一緒に移動します。 逆に、このレスポンダがアタッチメントフレームである場合は、 アタッチメントフレームもコンテントレスポンダも移動しません(何も起こりません)。
※ アタッチメントフレームとコンテントレスポンダの詳細については、 アタッチメントフレームとコンテントレスポンダを参照してください。
親レスポンダは、 親子イベント [SFXEvent(SFEVT_RESPONDER_OWNER, SFP16_OWNER_ARRANGE, このレスポンダ)] を受信します。
Tip | |
---|---|
検索に含める姉妹レスポンダを ID、 可視、活性、操作可能、フォーカスの状態で制限できます。 なお、アタッチメントフレームは、検索の対象外です。 |
注意 | |
---|---|
この関数を実行した後、 このレスポンダは指定された条件の姉妹レスポンダのなかで一番上の姉レスポンダになります。 |
すべての姉妹レスポンダの中で最前面に移動する方法 ToFront(); ID = 128 の姉妹レスポンダの中で最前面に移動する方法 ToFront(128); 可視かつ活性な姉妹レスポンダの中で最前面に移動する方法(操作可能とフォーカスの状態は問わない) ToFront(true, true, false, false); 可視、活性かつ操作可能な姉妹レスポンダの中で最前面に移動する方法(フォーカスの状態は問わない) ToFront(true, true, true, false);
SFYResponder::ToBack | SFYResponder::ToNthForward | SFYResponder::SetFrame | SFYResponder::Invalidate | SFXEvent | ID | 姉妹レスポンダ | アタッチメントフレームとコンテントレスポンダ | 状態 | 親子イベント[SFEVT_RESPONDER_OWNER]
[ public ] Void ToNthBackward( SInt32 index // 順番 (0-based) );
[ public ] Void ToNthBackward( SInt32 index // 順番 (0-based) Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public ] Void ToNthBackward( SInt32 index // 順番 (0-based) UInt32 id // ID );
[ public ] Void ToNthBackward( SInt32 index // 順番 (0-based) UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
この関数は、 このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された順番に移動します。
このレスポンダが SFYResponder::SetFrame 関数によりアタッチメントフレームが装着されたコンテントレスポンダである場合は、 アタッチメントフレームも一緒に移動します。 逆に、このレスポンダがアタッチメントフレームである場合は、 アタッチメントフレームもコンテントレスポンダも移動しません(何も起こりません)。
※ アタッチメントフレームとコンテントレスポンダの詳細については、 アタッチメントフレームとコンテントレスポンダを参照してください。
親レスポンダは、 親子イベント [SFXEvent(SFEVT_RESPONDER_OWNER, SFP16_OWNER_ARRANGE, このレスポンダ)] を受信します。
Tip | |
---|---|
検索に含める姉妹レスポンダを ID、 可視、活性、操作可能、フォーカスの状態で制限できます。 なお、アタッチメントフレームは、検索の対象外です。 |
注意 | |
---|---|
この関数を実行した後、 このレスポンダは指定された条件の姉妹レスポンダのなかで下から数えて指定された順番の妹レスポンダになります。 |
すべての姉妹レスポンダの中で背面から 3 番目に移動する方法 ToNthBackward(2); ID = 128 の姉妹レスポンダの中で背面から 3 番目に移動する方法 ToNthBackward(2, 128); 可視かつ活性な姉妹レスポンダの中で背面から 3 番目に移動する方法(操作可能とフォーカスの状態は問わない) ToNthBackward(2, true, true, false, false); 可視、活性かつ操作可能な姉妹レスポンダの中で背面から 3 番目に移動する方法(フォーカスの状態は問わない) ToNthBackward(2, true, true, true, false);
SFYResponder::ToNthForward | SFYResponder::ToBack | SFYResponder::SetFrame | SFYResponder::Invalidate | SFXEvent | ID | 姉妹レスポンダ | アタッチメントフレームとコンテントレスポンダ | 状態 | 親子イベント[SFEVT_RESPONDER_OWNER]
[ public ] Void ToNthForward( SInt32 index // 順番 (0-based) );
[ public ] Void ToNthForward( SInt32 index // 順番 (0-based) Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
[ public ] Void ToNthForward( SInt32 index // 順番 (0-based) UInt32 id // ID );
[ public ] Void ToNthForward( SInt32 index // 順番 (0-based) UInt32 id // ID Bool visible // 可視条件 Bool active // 活性条件 Bool enable // 操作可能条件 Bool focus // フォーカス条件 );
この関数は、 このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された順番に移動します。
このレスポンダが SFYResponder::SetFrame 関数によりアタッチメントフレームが装着されたコンテントレスポンダである場合は、 アタッチメントフレームも一緒に移動します。 逆に、このレスポンダがアタッチメントフレームである場合は、 アタッチメントフレームもコンテントレスポンダも移動しません(何も起こりません)。
※ アタッチメントフレームとコンテントレスポンダの詳細については、 アタッチメントフレームとコンテントレスポンダを参照してください。
親レスポンダは、 親子イベント [SFXEvent(SFEVT_RESPONDER_OWNER, SFP16_OWNER_ARRANGE, このレスポンダ)] を受信します。
Tip | |
---|---|
検索に含める姉妹レスポンダを ID、 可視、活性、操作可能、フォーカスの状態で制限できます。 なお、アタッチメントフレームは、検索の対象外です。 |
注意 | |
---|---|
この関数を実行した後、 このレスポンダは指定された条件の姉妹レスポンダのなかで上から数えて指定された順番の姉レスポンダになります。 |
すべての姉妹レスポンダの中で前面から 3 番目に移動する方法 ToNthForward(2); ID = 128 の姉妹レスポンダの中で前面から 3 番目に移動する方法 ToNthForward(2, 128); 可視かつ活性な姉妹レスポンダの中で前面から 3 番目に移動する方法(操作可能とフォーカスの状態は問わない) ToNthForward(2, true, true, false, false); 可視、活性かつ操作可能な姉妹レスポンダの中で前面から 3 番目に移動する方法(フォーカスの状態は問わない) ToNthForward(2, true, true, true, false);
SFYResponder::ToNthBackward | SFYResponder::ToFront | SFYResponder::SetFrame | SFYResponder::Invalidate | SFXEvent | ID | 姉妹レスポンダ | アタッチメントフレームとコンテントレスポンダ | 状態 | 親子イベント[SFEVT_RESPONDER_OWNER]
[ public ] Void UnregisterHandler( SFXEventRangeConstRef range // イベント範囲 SFYHandler::RuleRecConstRef rule // ハンドラ規則 );
[ public ] Void UnregisterHandler( SFXEventRangeConstRef range // イベント範囲 SFYHandler::HandlerSPP spp // ハンドラ関数 VoidPtr reference // リファレンス値 );
[ public ] Void UnregisterHandler( SFXEventRangeConstPtr range // イベント範囲の配列 SFYHandler::RuleRecConstPtr rule // ハンドラ規則の配列 SInt32 length // 配列の要素数 );
[ public ] Void UnregisterHandler( SFXEventRangeConstPtr range // イベント範囲の配列 SFYHandler::HandlerSPPConstPtr spp // ハンドラ関数の配列 VoidPtrConstPtr reference // リファレンス値の配列 SInt32 length // 配列の要素数 );
ハンドラ規則が適用されるイベントの範囲を表します。
ハンドラ関数とリファレンス値のセットを表します。
この関数は、 このレスポンダから指定されたハンドラの登録を解除します。
登録が解除されるハンドラは、イベント範囲とハンドラ規則が完全に一致するものに限ります。
同じ条件のハンドラが複数個登録されているときは、最後に登録されたハンドラが解除されます。
[ public ] Void UnregisterTracer( SFXEventRangeConstRef range // イベント範囲 );
[ public ] Void UnregisterTracer( SFXEventRangeConstPtr range // イベント範囲の配列 SInt32 length // 配列の要素数 );
イベントの範囲を表します。
この関数は、 このレスポンダのトレーサから指定された配信規則の登録を解除します。
登録が解除されるトレーサの配信規則は、イベント範囲が完全に一致するものに限ります。
同じ条件の配信規則が複数個登録されているときは、 最後に登録された配信規則が解除されます。
enum CodeEnum { CODE_TYPE = four_char_code('.', 'r', 's', 'p') }; SFMTYPEDEFTYPE(CodeEnum)
enum HorizontalEnum { HORIZONTAL_LEFT = 0, // 左詰め HORIZONTAL_CENTER, // 中央揃え HORIZONTAL_RIGHT // 右詰め }; SFMTYPEDEFTYPE(HorizontalEnum)
水平方向のアライメントについて
enum VerticalEnum { VERTICAL_TOP = 0, // 上詰め VERTICAL_MIDDLE, // 中央揃え VERTICAL_BOTTOM // 下詰め }; SFMTYPEDEFTYPE(VerticalEnum)
垂直方向のアライメントについて:
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |