前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFYResponder
レスポンダを表す抽象クラスです。
#include <SFYResponder.h.hpp>
class SFYResponder : protected static_exception< SFCError >;
SFMTYPEDEFRESPONDER(SFYResponder)

継承図

SFYResponder クラスの継承図

協調図

SFYResponder クラスの協調図

解説

■ 仕様と使い方

レスポンダシステムとは、 イベントの分岐処理や画面の描画処理を自動的に行う GUI フレームワークのことです。 開発者はレスポンダと呼ぶ GUI コンポーネントを作成して画面上に配置するだけです。

SFYResponder クラスは、 SFY レスポンダシステムの核となるクラスであり、 SFY レスポンダシステムは SFYResponder クラスと、 このクラスを継承するクラス群から構成されます。

下記の複雑な処理やプログラミングが不要になるので、 アプリ開発・保守の生産性は著しく向上します。

■主な機能

  1. イベントの分岐処理
  2. レスポンダの描画処理
  3. レスポンダの状態と属性の管理
  4. レスポンダのメモリ管理
  5. ウィンドウメニューダイアログコントロールフレームなどのカスタマイズ可能な汎用レスポンダ

レスポンダのクラス間には下記の継承関係と所有関係があります。

図 319. レスポンダの継承関係

レスポンダの継承関係

図 320. レスポンダの所有関係

レスポンダの所有関係

図 321. フレームの所有と親子関係

フレームの所有と親子関係
[Note] 注意
ダイアログとメニューはウィンドウと同一階層に存在します。 また、コンテナだけは特殊な設計になっていて、 コントロールや他のコンテナ(コンテナのみ)を管理したり、 逆にコントロールや他のコンテナ(コンテナ・ウィンドウ・ダイアログ)に管理されることも可能です。
[Important] フレーム

ウィンドウ、メニュー、ダイアログなどのレスポンダに、 タイトルや枠線を持つフレームを装着することが可能です。

[Tip] Tip
フレームを取り付けられたレスポンダはそのフレームを所有します。 このときフレームはレスポンダの親でも子でもありません。 フレームの親はレスポンダの親と一致しますが、親からみてフレームは子ではありません。

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));
}
[Caution] コンストラクタやデストラクタ内の 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
垂直方向のアライメントを表す定数です。

SFYResponder::SFYResponder
SFYResponder クラスのコンストラクタです。
[ protected, explicit ]
SFYResponder(Void);

解説

このコンストラクタは、以下の初期化処理を行います。

  1. タイプを ".rsp" に設定します。
  2. 状態を「無効+可視+活性+操作可能+フォーカス」に設定します。 ただし、SFYResponder::Factory 関数内の処理により、 インスタンス生成後直ちに有効状態は "true" に設定されます。
  3. 属性を「非透過」に設定します。
  4. IDを 0 に設定します。
  5. 実領域SFXRectangle(0, 0, 0, 0) に設定します。
  6. 仮想領域SFXRectangle(0, 0, 0, 0) に設定します。
  7. 内部で使用する SFYDistributer クラスのフラグ値を初期化します。
  8. 内部で使用する SFYRenderer クラスのフラグ値を初期化します。
[Tip] 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 | 実領域 | 仮想領域


SFYResponder::~SFYResponder
SFYResponder クラスのデストラクタです。
[ protected, virtual ]
virtual ~SFYResponder(Void);

解説

このデストラクタは、何も行いません。

内部実装

このデストラクタの内部実装は以下の通りです。

/*protected virtual */SFYResponder::~SFYResponder(Void)
{
}// SFYResponder::~SFYResponder //

参照

SFYResponder::SFYResponder


SFYResponder::ClearHandler
このレスポンダのハンドラの登録をすべて解除します。
[ public ]
Void ClearHandler(Void);

解説

この関数は、 このレスポンダのハンドラの登録をすべて解除します。

参照

SFYResponder::RegisterHandler | SFYResponder::UnregisterHandler | ハンドラ


SFYResponder::ClearTracer
このレスポンダのトレーサの配信規則の登録をすべて解除します。
[ public ]
Void ClearTracer(Void);

解説

この関数は、 このレスポンダのトレーサの配信規則の登録をすべて解除します。

参照

SFYResponder::RegisterTracer | SFYResponder::UnregisterTracer | トレーサ


SFYResponder::Distribute
指定された配信型イベントを SFYDistributer インスタンスと、このレスポンダ以下のレスポンダツリーに配信します。
[ public ]
SFCError Distribute(
    SFXEventConstRef event   // イベント
    BoolPtr result = null    // 処理結果
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • このレスポンダが所属するレスポンダツリーのルートレスポンダに SFYDistributer インスタンスが設定されていないとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、 指定された配信型イベントを このレスポンダが所属するレスポンダツリールートレスポンダに設定されている SFYDistributer インスタンスとこのレスポンダ以下の レスポンダツリーに配信します。

イベントは、SFYDistributer インスタンス、このレスポンダ以下のレスポンダツリーの順に、 トレーサに登録された配信規則に基づき配信されます。

[Caution] 注意

このレスポンダが所属するレスポンダツリーのルートレスポンダに 配信エンジンSFYDistributer)が設定されていない場合は、 SFERR_INVALID_STATE が返り、イベント配信は行われません (デフォルトの設定では、配信エンジンは SFYApplication クラスが内部に保持している ルートに設定されています)。

[Note] 注意

result 引数に true が返却された場合は、 レスポンダの状態が変化している可能性があるため、 SFYResponder::Render 関数を呼び出して再描画することを推奨します。

[Caution] 注意

BREW イベントは、 イベント受信時に起動される SFYApplication::HandleEvent 関数から呼び出される SFYResponder::Distribute 関数の処理によりレスポンダに配信されますので、 開発者はこの関数を呼び出す必要はありません。

ユーザーイベントは、 明示的に SFYResponder::Distribute 関数を呼び出して配信する必要があります。

[Note] 注意

コールバック型イベントは、 送信先レスポンダの子孫レスポンダに配信されません。

[Caution] イベントの配信について

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 イベント | レスポンダイベント | レスポンダツリー | イベントループ | ハンドラ | ルート


SFYResponder::Factory
NewInstance 関数の実装を補助します。
[ protected, static ]
SFYResponderSmp Factory(
    SFYResponderPtr responder      // インスタンス
    SFCErrorPtr exception = null   // エラー値
);

引数

responder

new 演算子を用いて新しく生成したインスタンスを設定します。

exception

内部で発生したエラー値を返します。

戻り値

  • 成功したとき: null 以外のポインタ
  • 失敗したとき: null ポインタ

解説

新しい具象レスポンダクラスを作成するときに必要となる NewInstance 関数の実装を補助します。

この関数を使えば、具象レスポンダクラスの NewInstance 関数は簡単に実装できます。

[Caution] 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 //

参照

SFYResponder::Initialize


SFYResponder::GetChildBack
最背面に位置するこのレスポンダの子レスポンダを取得します。
[ 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 を返します。

解説

この関数は、 最背面に位置するこのレスポンダの子レスポンダを取得します。

[Tip] Tip

検索に含める子レスポンダを ID、可視、活性、操作可能、 フォーカスの状態で制限できます。

[Tip] Tip

アタッチメントフレームは、検索の対象外です。

使用例

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 | 状態 | 子レスポンダ


SFYResponder::GetChildBackward
背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
[ 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 を返します。

解説

この関数は、 背面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。

[Tip] Tip

検索に含める子レスポンダを ID、可視、活性、操作可能、 フォーカスの状態で制限できます。

[Tip] Tip

アタッチメントフレームは、検索の対象外です。

使用例

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 | 状態 | 子レスポンダ


SFYResponder::GetChildCount
このレスポンダの子レスポンダの数を取得します。
[ 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     // フォーカス条件
);

戻り値

子レスポンダの数。

解説

この関数は、 このレスポンダの子レスポンダの数を取得します。

[Tip] Tip

検索に含める子レスポンダを ID、可視、活性、操作可能、 フォーカスの状態で制限できます。

[Tip] Tip

アタッチメントフレームは、検索の対象外です。

使用例

SInt32 count;

すべての子レスポンダの数を取得する方法
count = GetChildCount();

ID = 128 の子レスポンダの数を取得する方法
count = GetChildCount(128);

可視かつ活性な子レスポンダの数を取得する方法(操作可能とフォーカスの状態は問わない)
count = GetChildCount(true, true, false, false);

可視、活性かつ操作可能な子レスポンダの数を取得する方法(フォーカスの状態は問わない)
count = GetChildCount(true, true, true, false);

参照

状態 | ID | 子レスポンダ


SFYResponder::GetChildForward
前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。
[ 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 を返します。

解説

この関数は、 前面から数えて指定された順番に位置するこのレスポンダの子レスポンダを取得します。

[Tip] Tip

検索に含める子レスポンダを ID、可視、活性、操作可能、 フォーカスの状態で制限できます。

[Tip] Tip

アタッチメントフレームは、検索の対象外です。

使用例

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 | 状態 | 子レスポンダ


SFYResponder::GetChildFront
最前面に位置するこのレスポンダの子レスポンダを取得します。
[ 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 を返します。

解説

この関数は、 最前面に位置するこのレスポンダの子レスポンダを取得します。

[Tip] Tip

検索に含める子レスポンダを ID、可視、活性、操作可能、 フォーカスの状態で制限できます。

[Tip] Tip

アタッチメントフレームは、検索の対象外です。

使用例

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 | 状態 | 子レスポンダ


SFYResponder::GetDistributer
このレスポンダに設定されている配信エンジンを取得します。
[ public, const ]
SFYDistributerPtr GetDistributer(Void);

戻り値

レスポンダに設定された配信エンジン。

設定されていない場合、null が返ります。

解説

この関数は、 このレスポンダに設定されている配信エンジンを取得します。

参照

SFYResponder::SetDistributer | 配信エンジン


SFYResponder::GetFrame
このレスポンダに装着されたフレームを取得します。
[ public, const ]
SFYResponderSmp GetFrame(Void);

戻り値

  • このレスポンダがコンテントレスポンダである場合: アタッチメントフレーム
  • そうでない場合: null

解説

この関数は、 SFYResponder::SetFrame 関数を使用してこのレスポンダに装着された(アタッチメントフレーム)を取得します。

参照

SFYResponder::SetFrame | SFYFrame


SFYResponder::GetGlobalBound
このレスポンダのグローバル領域を取得します。
[ public, const ]
SFXRectangle GetGlobalBound(Void);

戻り値

レスポンダのグローバル領域。

解説

この関数は、 このレスポンダのグローバル領域を取得します。

[Note] 注意

グローバル領域は、 BREW インターフェースにレスポンダの実領域を デバイス画面の左上端を原点とする絶対座標系で表した矩形領域として渡す必要がある場合に利用します。

参照

SFYResponder::GetLocalBound | SFYResponder::GetRealBound | SFXRectangle | グローバル領域 | 実領域


SFYResponder::GetID
このレスポンダの ID を取得します。
[ public, const ]
UInt32 GetID(Void);

戻り値

このレスポンダの ID [32ビット符号なし整数(UInt32 型)]

解説

この関数は、 このレスポンダのID[32ビット符号なし整数(UInt32 型)]を取得します。

参照

SFYResponder::SetID | ID


SFYResponder::GetLocalBound
このレスポンダのローカル領域を取得します。
[ public, const ]
SFXRectangle GetLocalBound(Void);

戻り値

レスポンダのローカル領域。

解説

この関数は、 このレスポンダのローカル領域を取得します。

参照

SFYResponder::SetVirtualBound | SFYResponder::GetVirtualBound | SFYResponder::GetGlobalBound | SFXRectangle | ローカル領域


SFYResponder::GetNthBackward
このレスポンダが背面から数えて何番目に位置するかを取得します。
[ 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     // フォーカス条件
);

戻り値

このレスポンダの背面からの位置

解説

この関数は、 条件で指定した姉妹レスポンダのなかでこのレスポンダが背面から数えて何番目に位置するかを取得します。

[Tip] Tip

検索に含める姉妹レスポンダを ID、 可視、活性、操作可能、フォーカスの状態で制限できます。

[Tip] Tip

アタッチメントフレームは、検索の対象外です。

使用例

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 | 姉妹レスポンダ | 状態


SFYResponder::GetNthForward
このレスポンダが前面から数えて何番目に位置するかを取得します。
[ 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     // フォーカス条件
);

戻り値

このレスポンダの前面からの位置

解説

この関数は、 条件で指定した姉妹レスポンダのなかでこのレスポンダが前面から数えて何番目に位置するかを取得します。

[Tip] Tip

検索に含める姉妹レスポンダを ID、 可視、活性、操作可能、フォーカスの状態で制限できます。

[Tip] Tip

アタッチメントフレームは、検索の対象外です。

使用例

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 | 姉妹レスポンダ | 状態


SFYResponder::GetParent
このレスポンダの親レスポンダを取得します。
[ public, const ]
SFYResponderSmp GetParent(Void);

戻り値

  • このレスポンダの親レスポンダが存在する場合: 親レスポンダ
  • 存在しない場合: null

解説

この関数は、 このレスポンダの親レスポンダを取得します。

このレスポンダがアタッチメントフレームである場合は、 コンテントレスポンダの親レスポンダを返します。

[Note] アタッチメントフレームとコンテントレスポンダについて

詳細は、SFYResponder::SetFrame 関数の解説を参照してください。

参照

SFYResponder::SetParent | SFYResponder::SetFrame | 親レスポンダ


SFYResponder::GetPropertyTransparent
このレスポンダの透過属性を取得します。
[ public, const ]
Bool GetPropertyTransparent(Void);

解説

この関数は、 このレスポンダの透過属性を取得します。

参照

SFYResponder::SetPropertyTransparent | 属性


SFYResponder::GetRealBound
このレスポンダの実領域を取得します。
[ public, const ]
SFXRectangleConstRef GetRealBound(Void);

戻り値

レスポンダの実領域。

解説

この関数は、 このレスポンダの実領域を取得します。

参照

SFYResponder::SetRealBound | SFYResponder::GetVirtualBound | SFYResponder::GetGlobalBound | SFXRectangle | 実領域


SFYResponder::GetReference
このレスポンダのリファレンス値を取得します。
[ 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());

参照

SFYResponder::SetReference | リファレンス


SFYResponder::GetRenderer
このレスポンダに設定されている描画エンジンを取得します。
[ public, const ]
SFYRendererPtr GetRenderer(Void);

戻り値

レスポンダに設定された描画エンジン。

設定されていない場合、null が返ります。

解説

この関数は、 このレスポンダに設定されている描画エンジンを取得します。

参照

SFYResponder::SetRenderer | 描画エンジン


SFYResponder::GetRoot
このレスポンダが所属するレスポンダツリーのルートレスポンダを取得します。
[ public ]
SFYResponderSmp GetRoot(Void);

戻り値

レスポンダが所属するレスポンダツリーのルートレスポンダ。

解説

この関数は、 このレスポンダが所属するレスポンダツリールートレスポンダを取得します。

ルートレスポンダとはレスポンダツリーの最上位に位置するレスポンダです。

親レスポンダを持たないレスポンダはルートレスポンダであるとみなされます。

参照

SFYResponder::IsRoot | レスポンダツリー | ルートレスポンダ


SFYResponder::GetStateActive
このレスポンダの活性状態を取得します。
[ public, const ]
Bool GetStateActive(
    Bool inherit = false   // 状態のフラグ値、または状態の ON / OFF 値の何れを取得するか
);

戻り値

  • 引数に false を指定した場合(デフォルト): 状態のフラグ値
  • 引数に true を指定した場合: 状態の ON / OFF 値

解説

この関数は、 このレスポンダの活性状態を取得します。

引数に true を指定すると、状態の ON / OFF 値を取得できます。 デフォルト値である false を設定すると、状態のフラグ値を取得できます。

引数に true を指定したとき、 状態が ON ときは true、OFF のときは false が返ります。

[Tip] Tip
このレスポンダがアタッチメントフレームである場合は、 コンテントレスポンダの状態の ON / OFF 値が返ります。 ただし、アタッチメントフレームのすべての状態のフラグ値が true に設定されていることが前提になります。

[Note] 注意
活性状態が ON であるとき、 レスポンダは実際に活性状態として描画されます。

参照

SFYResponder::SetStateActive | SFYResponder::SetFrame | 状態


SFYResponder::GetStateEnable
このレスポンダの操作可能状態を取得します。
[ public, const ]
Bool GetStateEnable(
    Bool inherit = false   // 状態のフラグ値、または状態の ON / OFF 値の何れを取得するか
);

戻り値

  • 引数に false を指定した場合(デフォルト): 状態のフラグ値
  • 引数に true を指定した場合: 状態の ON / OFF 値

解説

この関数は、 このレスポンダの操作可能状態を取得します。

引数に true を指定すると、状態の ON / OFF 値を取得できます。 デフォルト値である false を設定すると、状態のフラグ値を取得できます。

引数に true を指定したとき、 状態が ON ときは true、OFF のときは false が返ります。

[Tip] Tip
このレスポンダがアタッチメントフレームである場合は、 コンテントレスポンダの状態の ON / OFF 値が返ります。 ただし、アタッチメントフレームのすべての状態のフラグ値が true に設定されていることが前提になります。

[Note] 注意
操作可能状態が ON であるとき、 レスポンダは実際に操作可能です(フォーカスを移動できます)。

参照

SFYResponder::SetStateEnable | SFYResponder::SetFrame | 状態


SFYResponder::GetStateFocus
このレスポンダのフォーカス状態を取得します。
[ public, const ]
Bool GetStateFocus(
    Bool inherit = false   // 状態のフラグ値、または状態の ON / OFF 値の何れを取得するか
);

戻り値

  • 引数に false を指定した場合(デフォルト): 状態のフラグ値
  • 引数に true を指定した場合: 状態の ON / OFF 値

解説

この関数は、 このレスポンダのフォーカス状態を取得します。

引数に true を指定すると、状態の ON / OFF 値を取得できます。 デフォルト値である false を設定すると、状態のフラグ値を取得できます。

引数に true を指定したとき、 状態が ON ときは true、OFF のときは false が返ります。

[Tip] Tip
このレスポンダがアタッチメントフレームである場合は、 コンテントレスポンダの状態の ON / OFF 値が返ります。 ただし、アタッチメントフレームのすべての状態のフラグ値が true に設定されていることが前提になります。

[Note] 注意
フォーカス状態が ON であるとき、 レスポンダは実際にフォーカスされています。

参照

SFYResponder::SetStateFocus | SFYResponder::SetFrame | 状態


SFYResponder::GetStateValid
このレスポンダの有効状態を取得します。
[ public, const ]
Bool GetStateValid(
    Bool inherit = false   // 状態のフラグ値、または状態の ON / OFF 値の何れを取得するか
);

戻り値

  • 引数に false を指定した場合(デフォルト): 状態のフラグ値
  • 引数に true を指定した場合: 状態の ON / OFF 値

解説

この関数は、 このレスポンダの有効状態を取得します。

引数に true を指定すると、状態の ON / OFF 値を取得できます。 デフォルト値である false を設定すると、状態のフラグ値を取得できます。

引数に true を指定したとき、 状態が ON ときは true、OFF のときは false が返ります。

[Tip] Tip
このレスポンダがアタッチメントフレームである場合は、 コンテントレスポンダの状態の ON / OFF 値が返ります。 ただし、アタッチメントフレームのすべての状態のフラグ値が true に設定されていることが前提になります。

[Note] 注意
有効状態が ON であるときに限り、 レスポンダはイベントを受信できます。

参照

SFYResponder::Initialize | SFYResponder::Terminate | SFYResponder::SetDistributer | SFYResponder::SetFrame | 状態


SFYResponder::GetStateVisible
このレスポンダの可視状態を取得します。
[ public, const ]
Bool GetStateVisible(
    Bool inherit = false   // 状態のフラグ値、または状態の ON / OFF 値の何れを取得するか
);

戻り値

  • 引数に false を指定した場合(デフォルト): 状態のフラグ値
  • 引数に true を指定した場合: 状態の ON / OFF 値

解説

この関数は、 このレスポンダの可視状態を取得します。

引数に true を指定すると、状態の ON / OFF 値を取得できます。 デフォルト値である false を設定すると、状態のフラグ値を取得できます。

引数に true を指定したとき、 状態が ON ときは true、OFF のときは false が返ります。

[Tip] Tip
このレスポンダがアタッチメントフレームである場合は、 コンテントレスポンダの状態の ON / OFF 値が返ります。 ただし、アタッチメントフレームのすべての状態のフラグ値が true に設定されていることが前提になります。

[Note] 注意
可視状態が ON であるとき、 レスポンダは実際に見えます。

参照

SFYResponder::SetStateVisible | SFYResponder::SetFrame | 状態


SFYResponder::GetSuitableBound
このレスポンダの最適な領域(サイズ)を取得します。
[ public ]
SFXRectangle GetSuitableBound(Void);
[ public ]
SFXRectangle GetSuitableBound(
    SFXRectangleConstRef rectangle   // ヒント領域
);
[ public ]
SFXRectangle GetSuitableBound(
    SFXRectangleConstRef param   // ヒント領域
    HorizontalEnum horizontal    // 水平アライメント
    VerticalEnum vertical        // 垂直アライメント
);

戻り値

レスポンダの最適な領域(サイズ)。

解説

この関数は、 このレスポンダの最適な領域を取得します。 この関数はレスポンダの最適な実領域を設定するときに利用します。

自身が装着済みフレームの場合は、 フレームが装着されているレスポンダの最適な領域計算に委任します。

引数にヒント領域を指定した場合は、 ヒント領域内で最適な領域を計算します。

引数にヒント領域およびアライメントを指定した場合は、 ヒント領域内で最適な領域を計算したのち、領域をアライメントに沿って整列します。

戻り値の最適な領域の始点は以下の通りです。

  • 引数にヒント領域を指定した場合: ヒント領域の始点
  • 引数にヒント領域およびアライメントを指定した場合: ヒント領域内のアライメントに依存
  • 何も指定しない場合: 実領域の始点[デフォルト値: (0, 0)]

この関数を使用して実領域を設定する際は、 必要に応じて最適な位置に再配置してください。

[Tip] Tip
SFZSoftKeyControl クラスは携帯電話の画面最下端に配置されます。

[Tip] Tip

ラベルやボタンなどのレスポンダは、 テキストやイメージを設定した後 SFYResponder::GetSuitableBound() を呼び出して最適な領域を取得します。

戻り値の領域の始点は (0, 0) なので、 SFXRectangle::SetOrigin / SFXRectangle::Offset 関数などを利用して最適な位置に再配置してから実領域を設定します。

[Note] 領域イベント[(SFEVT_RESPONDER_BOUND, SFP16_BOUND_OPTIMIZE) イベント]

SFYResponder::GetSuitableBound 関数は、 引数にヒント領域を指定した場合は 領域イベント [SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_OPTIMIZE, rectangle)] をレスポンダに送信します。

SFYWidget クラスを継承するレスポンダが領域イベントを受信すると、 SFYWidget::SFYWidget コンストラクタで最初に登録した領域イベント専用ハンドラの処理により、 SFYWidget::HandleBoundOptimize 仮想関数が呼び出されます。

※ 領域イベントの P32 パラメータ rectangle にはヒント領域が初期設定されています。

[Note] (SFEVT_RESPONDER_BOUND, SFP16_BOUND_OPTIMIZE) イベント受信時の最適な領域計算

SFYWidget::HandleBoundOptimize 仮想関数をオーバーライドする以外に、 領域イベント専用ハンドラ[XANDLER_DECLARE_VOIDBOUND]を定義・実装し レスポンダに登録して行うことも可能です。

最適な領域の計算は、最初に SFYWidget::HandleBoundOptimize 仮想関数を実行し、 次に領域イベント専用ハンドラを登録した順に実行して行われます。

領域イベント専用ハンドラを宣言し登録する手間が省けるので、 通常は SFYWidget::HandleBoundOptimize 仮想関数をオーバーライドして処理を記述します。

[Note] 領域イベント[(SFEVT_RESPONDER_BOUND, SFP16_BOUND_REQUEST) イベント]

SFYResponder::GetSuitableBound 関数は、 引数に何も指定しない場合は 領域イベント [SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_REQUEST, rectangle)] をレスポンダに送信します。

SFYWidget クラスを継承するレスポンダが領域イベントを受信すると、 SFYWidget::SFYWidget コンストラクタで最初に登録した領域イベント専用ハンドラの処理により、 SFYWidget::HandleBoundRequest 仮想関数が呼び出されます。

※ 領域イベントの P32 パラメータ rectangle には実領域が初期設定されています。

[Tip] Tip
実領域のデフォルト値は SFXRectangle(0, 0, 0, 0) です。

[Note] (SFEVT_RESPONDER_BOUND, SFP16_BOUND_REQUEST) イベント受信時の最適な領域計算

SFYWidget::HandleBoundRequest 仮想関数をオーバーライドする以外に、 領域イベント専用ハンドラ[XANDLER_DECLARE_VOIDBOUND]を定義・実装し レスポンダに登録して行うことも可能です。

最適な領域の計算は、最初に SFYWidget::HandleBoundRequest 仮想関数を実行し、 次に領域イベント専用ハンドラを登録した順に実行して行われます。

領域イベント専用ハンドラを宣言し登録する手間が省けるので、 通常は SFYWidget::HandleBoundRequest 仮想関数をオーバーライドして処理を記述します。

[Caution] GetSuitableBound 関数が有効になるとき

実際の計算は SFYWidget::HandleBoundRequest / SFYWidget::HandleBoundOptimize 仮想関数で行われます。 これらの関数が実装されていないレスポンダでは、 引数に指定したヒント領域、または実領域がそのまま返るだけです。

[Tip] 複数行テキストを保持するレスポンダ

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]


SFYResponder::GetSuitableMargin
このレスポンダのフレーム余白領域を取得します。
[ public ]
SFXMargin GetSuitableMargin(Void);

戻り値

  • 具象フレームであるとき: フレーム余白領域(SFXMargin)
  • そうでないとき: SFXMargin(0,0,0,0)

解説

この関数は、 このレスポンダのフレーム余白領域を取得します。 このレスポンダの外枠やタイトルは、このフレーム余白領域に描画されます。

この関数は、 余白イベント [SFXEvent(SFEVT_RESPONDER_MARGIN, SFP16_MARGIN_REQUEST, margin)] をレスポンダに送信します。

SFYFrame を継承する具象フレームのレスポンダでは、 余白イベントを受信すると、 SFYFrame::HandleMarginRequest 仮想関数が呼び出してフレーム余白領域を計算します。

[Warning] 警告

SFYResponder::SetFrame 関数を使用してレスポンダにフレームを装着する場合は、 内部でこの関数を使用してアタッチメントフレームコンテントレスポンダ実領域が自動的に計算されます。 そのため、開発者が明示的にこの関数を利用する機会はほとんどないでしょう。

参照

SFYFrame::HandleMarginRequest | SFYResponder::SetFrame | SFXMargin | SFYFrame | SFXEvent | 余白イベント[SFEVT_RESPONDER_MARGIN] | フレーム


SFYResponder::GetThis
このレスポンダのスマートポインタを取得します。
[ protected ]
SFYResponderSmp GetThis(Void);

戻り値

スマートポインタで保持された this

解説

この関数は、このレスポンダのスマートポインタを取得します。

内部実装

この関数の内部実装は以下の通りです。

/*protected */SFYResponderSmp SFYResponder::GetThis(Void)
{
    return SFYResponderSmp(this);
}// SFYResponder::GetThis //

参照

SFXResponderPointer


SFYResponder::GetType
このレスポンダのタイプを取得します。
[ public, const ]
SFCType GetType(Void);

戻り値

このレスポンダのタイプ[4 文字リテラル(four_char_code マクロで定義)]

タイプを設定していない場合、 継承する親クラスのタイプが返ります。

解説

この関数は、 このレスポンダのタイプ[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;
}

参照

SFYResponder::SetType | タイプ | タイプ一覧


SFYResponder::GetVirtualBound
このレスポンダの仮想領域を取得します。
[ public, const ]
SFXRectangleConstRef GetVirtualBound(Void);

戻り値

レスポンダの仮想領域。

解説

この関数は、 このレスポンダの仮想領域を取得します。

参照

SFYResponder::SetVirtualBound | SFYResponder::GetRealBound | SFYResponder::GetLocalBound | SFXRectangle | 仮想領域


SFYResponder::HasFrame
このレスポンダがコンテントレスポンダであるかどうかを判定します。
[ public, const ]
Bool HasFrame(Void);

戻り値

  • このレスポンダがコンテントレスポンダであるとき: true
  • そうでないとき: false

解説

この関数は、このレスポンダがコンテントレスポンダであるかどうかを判定します。

[Note] コンテントレスポンダについて

詳細は、SFYResponder::SetFrame 関数の解説を参照してください。

参照

SFYResponder::IsFrame | SFYResponder::SetFrame | SFYFrame


SFYResponder::Initialize
このレスポンダを初期化します。
[ public ]
Void Initialize(Void);

解説

この関数は、 このレスポンダの有効状態フラグを true("有効")に設定します。

[Caution] 注意
SFYResponder::Initialize 関数は SFYResponder::Factory 関数内で自動的に呼び出されるので、 開発者が明示的にこの関数を呼び出すことはありません。
[Caution] 注意
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]


SFYResponder::Invalidate
指定された領域を再描画領域に登録します。
[ public ]
Void Invalidate(Void);
[ public ]
Void Invalidate(
    SFXRectangleConstRef param   // 設定する領域 [デフォルト値(何も指定しない場合): このレスポンダのローカル領域]
);

解説

この関数は、 指定された領域(ローカル領域の座標系で表した矩形) を再描画領域に登録します。

デフォルト値: param 引数に何も指定しない場合、このレスポンダのローカル領域。

"SFYResponder::Render(false)" の実行により 描画エンジンを起動した場合、 可視領域と交差領域を持つ再描画領域を登録したレスポンダだけが 描画イベントを受信します。

true を指定した場合、 再描画領域の登録に関係なく、 可視領域を持つレスポンダはすべて描画イベントを受信します。

パフォーマンスの観点から、 Invalidate 関数により再描画が必要なレスポンダの領域だけを再描画領域に登録し、 Render(false) 関数を呼び出して再描画を行う方法を推奨します。

なお、Render 関数で再描画の対象となるレスポンダは、 レスポンダツリー内でこの関数を呼び出したレスポンダとその子孫レスポンダです。

[Caution] 注意

再描画領域を登録していても、 その領域がレスポンダの可視領域と交差領域を持たない場合は、 描画イベントを受信しません。

[Important] Invalidate 関数の呼び出しについて

SophiaFramework UNIVERSE 標準提供のレスポンダクラスでは、 領域、状態、属性、親、姉妹間の順序、テキスト、フォント、色などの視覚的要素を変更すると、 再描画が必要なレスポンダの領域が自動的に再描画領域に登録されます。 param 引数にレスポンダの部分領域を指定して再描画の最適化を行う場合を除き、 Invalidate 関数を呼び出す必要はありません。

開発者が定義したレスポンダクラスでは、 テキストやイメージなどレスポンダ内の視覚的な要素を変更した場合、 必ず Invalidate 関数により再描画領域を登録するようにしてください。

再描画領域を登録しなければ、 "SFYResponder::Render(false)" を呼び出して描画エンジンを起動したときにレスポンダは再描画されません。

[Note] 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 | ローカル領域 | 実領域 | 可視領域 | 再描画領域 | 状態 | 描画処理 | 描画エンジン | 描画イベント | 描画ハンドラ | レスポンダツリー | イベントループ | ルート(基礎編)


SFYResponder::InvokeBackward
指定されたコールバック型イベントをこのレスポンダに送信します (ハンドラは登録順に起動されます)。
[ public ]
Void InvokeBackward(
    SFXEventConstRef event   // イベント
    Bool overload            // 重複条件
    BoolPtr result = null    // 処理結果
);

解説

この関数は、 指定されたコールバック型イベントをこのレスポンダに送信します。

ハンドラは、 このレスポンダのハンドラリストに登録された順で起動されます。

重複処理の条件パラメータである overload 引数に false が渡された場合、 ハンドラがイベントを処理して true を返すと、そこで処理を終了します。

overload 引数に true が渡された場合、 ハンドラがイベントを処理して true を返しても、無くなるまでハンドラの起動を継続します。

[Tip] レスポンダイベント
レスポンダイベントは、 InvokeBackward / InvokeForward 関数を使用して送信します。
[Tip] 利用シーン

ボタンコントロールやダイアログなどのレスポンダ実装において、 レスポンダ内のテキストやイメージが変更されたときにスタイルイベント[SFEVT_RESPONDER_STYLE]を送信するために利用します。

[Tip] SFYResponder::InvokeForward 関数

ハンドラリストへの登録の逆順でハンドラを起動するには、 SFYResponder::InvokeForward 関数を使います。

[Note] イベントの送信先

コールバック型イベントは、 送信先レスポンダの子孫レスポンダに配信されません。

[Warning] デストラクタ内でのイベント送信

デストラクタを実行する前にこのレスポンダの有効状態は無効になっているため、 デストラクタ内でこのレスポンダにイベントを送信してはいけません(送信しても動作は保証されません)。

使用例

以下は、テキストの変更時にスタイルイベントを送信するコードです。

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] | イベントループ


SFYResponder::InvokeForward
指定されたコールバック型イベントをこのレスポンダに送信します (ハンドラは登録の逆順に起動されます)。
[ public ]
Void InvokeForward(
    SFXEventConstRef event   // イベント
    Bool overload            // 重複条件
    BoolPtr result = null    // 処理結果
);

解説

この関数は、 指定されたコールバック型イベントをこのレスポンダに送信します。

ハンドラは、 このレスポンダのハンドラリストに登録された逆順で起動されます。

重複処理の条件パラメータである overload 引数に false が渡された場合、 ハンドラがイベントを処理して true を返すと、そこで処理を終了します。

overload 引数に true が渡された場合、 ハンドラがイベントを処理して true を返しても、無くなるまでハンドラの起動を継続します。

[Tip] レスポンダイベント
レスポンダイベントは、 InvokeBackward / InvokeForward 関数を使用して送信します。
[Tip] 利用シーン

ボタンコントロールやダイアログなどのレスポンダ実装において、 それらに対する操作が行われた時に結果イベント[SFEVT_RESPONDER_RESULT]を送信するために利用します。

[Tip] SFYResponder::InvokeBackward 関数

ハンドラリストへの登録順でハンドラを起動するには、SFYResponder::InvokeBackward 関数を使います。

[Note] イベントの送信先

コールバック型イベントは、 送信先レスポンダの子孫レスポンダに配信されません。

[Warning] デストラクタ内でのイベント送信

デストラクタを実行する前にこのレスポンダの有効状態は無効になっているため、 デストラクタ内でこのレスポンダにイベントを送信してはいけません(送信しても動作は保証されません)。

使用例

以下は、ボタンの操作時に結果イベントを送信するコードです。

Void USRControl::HandleOperateKeyRelease(Void)
{

    // 結果イベントを送信する
    InvokeForward(SFXEvent(SFEVT_RESPONDER_RESULT, SFP16_RESULT_OK, GetCurrentValue()), false);

    return;
}

参照

SFYResponder::InvokeBackward | SFYResponder::Distribute | SFXEvent | レスポンダイベント | コールバック型 | 配信型 | ハンドラ | ハンドラリスト | 結果イベント[SFEVT_RESPONDER_RESULT] | イベントループ


SFYResponder::IsBack
このレスポンダが最背面に位置するかどうかを判定します。
[ 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     // フォーカス条件
);

Return value

  • このレスポンダが最背面に位置するとき: true
  • そうでないとき: false

解説

この関数は、 条件で指定した姉妹レスポンダのなかでこのレスポンダが最背面に位置するかどうかを判定します。

[Tip] Tip

検索に含める姉妹レスポンダを ID、 可視、活性、操作可能、フォーカスの状態で制限できます。

[Tip] Tip

アタッチメントフレームは、検索の対象外です。

使用例

すべての姉妹レスポンダの中で最背面かどうかを判定する方法
if (IsBack()) {
    ...
}

ID = 128 の姉妹レスポンダの中で最背面かどうかを判定する方法
if (IsBack(128)) {
    ...
}

可視かつ活性な姉妹レスポンダの中で最背面かどうかを判定する方法(操作可能とフォーカスの状態は問わない)
if (IsBack(true, true, false, false)) {
    ...
}

可視、活性かつ操作可能な姉妹レスポンダの中で最背面かどうかを判定する方法(フォーカスの状態は問わない)
if (IsBack(true, true, true, false)) {
    ...
}

参照

SFYResponder::IsFront | SFYResponder::IsNthBackward | ID | 姉妹レスポンダ | 状態


SFYResponder::IsFrame
このレスポンダがアタッチメントフレームであるかどうかを判定します。
[ public, const ]
Bool IsFrame(Void);

戻り値

  • このレスポンダがアタッチメントフレームであるとき: true
  • そうでないとき: false

解説

この関数は、このレスポンダがアタッチメントフレームであるかどうかを判定します。

[Note] アタッチメントフレームについて

詳細は、SFYResponder::SetFrame 関数の解説を参照してください。

参照

SFYResponder::HasFrame | SFYResponder::SetFrame | SFYFrame


SFYResponder::IsFront
このレスポンダが最前面に位置するかどうかを判定します。
[ 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     // フォーカス条件
);

Return value

  • このレスポンダが最前面に位置するとき: true
  • そうでないとき: false

解説

この関数は、 条件で指定した姉妹レスポンダのなかでこのレスポンダが最前面に位置するかどうかを判定します。

[Tip] Tip

検索に含める姉妹レスポンダを ID、 可視、活性、操作可能、フォーカスの状態で制限できます。

[Tip] Tip

アタッチメントフレームは、検索の対象外です。

使用例

すべての姉妹レスポンダの中で最前面かどうかを判定する方法
if (IsFront()) {
    ...
}

ID = 128 の姉妹レスポンダの中で最前面かどうかを判定する方法
if (IsFront(128)) {
    ...
}

可視かつ活性な姉妹レスポンダの中で最前面かどうかを判定する方法(操作可能とフォーカスの状態は問わない)
if (IsFront(true, true, false, false)) {
    ...
}

可視、活性かつ操作可能な姉妹レスポンダの中で最前面かどうかを判定する方法(フォーカスの状態は問わない)
if (IsFront(true, true, true, false)) {
    ...
}

参照

SFYResponder::IsBack | SFYResponder::IsNthForward | ID | 姉妹レスポンダ | 状態


SFYResponder::IsNthBackward
このレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。
[ 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     // フォーカス条件
);

Return value

  • このレスポンダが背面から数えて指定された順番に位置するとき: true
  • そうでないとき: false

解説

この関数は、 条件で指定した姉妹レスポンダのなかでこのレスポンダが背面から数えて指定された順番に位置するかどうかを判定します。

[Tip] Tip

検索に含める姉妹レスポンダを ID、 可視、活性、操作可能、フォーカスの状態で制限できます。

[Tip] Tip

アタッチメントフレームは、検索の対象外です。

使用例

すべての姉妹レスポンダの中で背面から 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 | 姉妹レスポンダ | 状態


SFYResponder::IsNthForward
このレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。
[ 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     // フォーカス条件
);

Return value

  • このレスポンダが前面から数えて指定された順番に位置するとき: true
  • そうでないとき: false

解説

この関数は、 条件で指定した姉妹レスポンダのなかでこのレスポンダが前面から数えて指定された順番に位置するかどうかを判定します。

[Tip] Tip

検索に含める姉妹レスポンダを ID、 可視、活性、操作可能、フォーカスの状態で制限できます。

[Tip] Tip

アタッチメントフレームは、検索の対象外です。

使用例

すべての姉妹レスポンダの中で前面から 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 | 姉妹レスポンダ | 状態


SFYResponder::IsRoot
このレスポンダがルートレスポンダであるかどうかを判定します。
[ public, const ]
Bool IsRoot(Void);

Return value

  • このレスポンダがルートレスポンダであるとき: true
  • そうでないとき: false

解説

この関数は、 このレスポンダがルートレスポンダかどうかを判定します。

ルートレスポンダとはレスポンダツリーの最上位に位置するレスポンダです。

[Caution] 注意
親レスポンダを持たないレスポンダはルートレスポンダであるとみなされます。

参照

SFYResponder::GetRoot | レスポンダツリー | ルートレスポンダ | ルート | SFZRoot


SFYResponder::Recover
デバイス画面保存用ビットマップを使用してこのレスポンダとレスポンダ空間との交差領域を復元します。
[ public ]
SFCError Recover(Void);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • このレスポンダがルートレスポンダでないとき、 このレスポンダに描画エンジン(SFYRenderer)が設定されていないとき、 またはデバイス画面保存用ビットマップが存在しないとき: SFERR_INVALID_STATE

解説

この関数は、 デバイス画面保存用ビットマップを使用してこのレスポンダとレスポンダ空間との交差領域を復元します。

[Note] 注意

この関数は、 このレスポンダが描画エンジンSFYRenderer)が設定された、 ルートレスポンダでない場合は、 SFERR_INVALID_STATE が返ります。

また、デバイス画面保存用ビットマップが存在しない場合は、 SFERR_INVALID_STATE が返され、上記交差領域の復元は行われません。

[Note] デバイス画面保存用ビットマップ

SophiaFramework UNIVERSE では、 SFYResponder::Render 関数により再描画した領域を「デバイス画面保存用ビットマップ」 と呼ぶデバイス画面を同じサイズの内部のビットマップに上書き保存します。

SFYResponder::Render 関数によるレスポンダの再描画では、 前回再描画時と同じ場合は、 描画ハンドラを呼び出す代わりに、 このビットマップから再描画領域をコピーすることにより再描画を高速に行っています。

参照

SFYResponder::IsRoot | SFYResponder::SetRenderer | SFYResponder::Render | SFYRenderer | レスポンダ空間 | ルート | 描画処理 | 描画エンジン | ルートレスポンダ | レスポンダツリー


SFYResponder::RegisterHandler
指定されたハンドラをこのレスポンダに登録します。
[ 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                        // 配列の要素数
);

引数

range

ハンドラ規則が適用されるイベントの範囲を表します。

rule

ハンドラ関数とリファレンス値のセットを表します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • range / rule / reference 引数が null であるとき: SFERR_INVALID_PARAM
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、 指定されたハンドラをこのレスポンダに登録します。

同一のイベントに対して複数のハンドラを登録することも可能です。 このとき、ハンドラは登録順または逆順で呼び出されます。 また、ハンドラがイベントを処理したとき、 そこで終了する、 あるいは、無くなるまでハンドラの呼び出しを継続する、 設定によりどちらも可能です。

[Caution] 標準トレーサに『配信条件: なし[SFYTracer::STATE_NONE]』で配信規則が登録されている BREW イベントを受信する方法

標準トレーサに『配信条件: なし[SFYTracer::STATE_NONE]』 で配信規則が登録されているBREW イベントは、 SFYApplication が内部で保持するルートを含めレスポンダには配信されません。

これは標準トレーサの配信規則が SFYDistributer インスタンスに登録されているからです。

このイベントは、 直接 SFYDistributer インスタンスにハンドラを登録して受信します。 具体的には以下の方法で行います。

  1. SFYApplication::GetDistributer 関数を使用して SFYDistributer のインスタンスを取得します。
  2. SFYDistributer::RegisterHandler 関数を使用してハンドラを登録します。
  3. ハンドラはどのクラスに定義してもかまいませんが、 この場合、invoker 引数には null が渡される点に注意してください。

使用例

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 | ハンドラ | 標準トレーサ


SFYResponder::RegisterTracer
指定された配信規則をこのレスポンダのトレーサに登録します。
[ 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                        // 配列の要素数
);

引数

range

トレーサ規則が適用されるイベントの範囲を表します。

rule

配信順序と配信条件と重複条件のセットを表します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • range / order / state / overload 引数が null であるとき: SFERR_INVALID_PARAM
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、 指定された配信規則をこのレスポンダのトレーサに登録します。

同一のイベントに対して複数の配信規則を登録できます。 この場合、最後に登録された配信規則だけが有効になります。

使用例

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 | トレーサ


SFYResponder::Render
このレスポンダ以下のレスポンダツリーをレスポンダ空間に再描画します。
[ public ]
SFCError Render(
    Bool force = false   
// 可視領域を持つすべてのこのレスポンダとその子孫レスポンダを再描画したい場合: true、
再描画領域に登録された、可視領域を持つこのレスポンダとその子孫レスポンダだけを再描画したい場合: false

);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • このレスポンダが所属するレスポンダツリーのルートレスポンダに SFYRenderer インスタンスが設定されていないとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、 このレスポンダ以下のレスポンダツリーをレスポンダ空間に再描画します。

再描画の対象となるレスポンダは、 レスポンダツリー内のこのレスポンダ以下のレスポンダです。

[Caution] 注意

描画エンジンSFYRenderer)が、 このレスポンダが所属するレスポンダツリールートレスポンダに設定されていない場合は、 SFERR_INVALID_STATE が返り、再描画は行われません

デフォルトの設定では、描画エンジンは SFYApplication クラスが内部に保持している ルートに設定されています。

[1]Render(false) または Render(): 引数に false、または何も指定しない場合

再描画領域が、 可視領域と交差領域を持つレスポンダだけが、 描画イベントを受信し、 描画ハンドラを起動します。

描画イベントを受信しなかったレスポンダは、 必要に応じて『デバイス画面保存用ビットマップ』を利用して、 可視領域を復元します。

[Note] 描画エンジンの最適化処理

SFYResponder::Render 関数は、 以下の最適化処理を行います。

不可視状態であったり、 他のレスポンダに隠れて可視領域を持たない、 または可視領域が存在しても再描画領域と共通部分を持たないレスポンダは、 描画イベントを受信しません。

描画イベントを受信しなかったレスポンダは、 親レスポンダまたは妹レスポンダの再描画により一部または全部が書き換えられてしまった場合、 デバイス画面保存用ビットマップからコピーして可視領域を復元します。

[Note] デバイス画面保存用ビットマップ

SFYResponder::Render 関数は、 実際に再描画した領域を『デバイス画面保存用ビットマップ』 と呼ぶデバイス画面と同一サイズの内部ビットマップに上書き保存します。

"SFYResponder::Render(false)" の実行で描画イベントを受信しなかったレスポンダは、 親レスポンダまたは妹レスポンダの再描画により一部または全部が書き換えられてしまった場合、 デバイス画面保存用ビットマップからコピーして自分の可視領域を復元します。

デバイス画面保存用ビットマップを利用した再描画の最適化は、 内部で自動的に行われます。アプリ中断時にこのビットマップを解放するかどうかの判断を除き、 開発者はこれについて意識する必要はありません。

[2]Render(true): 引数に true を指定した場合(強制再描画を行う場合)

再描画領域の登録に関係なく、 可視領域を持つすべてのレスポンダが、 描画イベントを受信し、 描画ハンドラを起動します。

[Caution] 注意

再描画領域の登録に関係なく、 可視領域があれば描画ハンドラが起動される点に注意してください。

[Note] Render 関数の呼び出しのタイミング

SFYResponder::Render 関数による 描画エンジン起動のタイミングは、以下の 3 つの何れかになります。

イベントループ終了時や、アプリ開始/再開時または優先的イベントハンドラ終了時は、 自動的に SFYResponder::Render 関数が呼び出され、描画エンジンが起動されます。

コールバック終了時は、 開発者が明示的に SFYResponder::Render 関数を呼び出して、 描画エンジンを起動する必要があります。

[Note] [非推奨(廃止予定)]グローバル領域イベント

グローバル領域イベント[(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] | ルート


SFYResponder::SetDistributer
指定された配信エンジンをこのレスポンダに設定します。
[ public ]
Void SetDistributer(
    SFYDistributerPtr param   // 設定する値
);

解説

この関数は、 指定された配信エンジンをこのレスポンダに設定します。

[Note] 注意

配信エンジンは、 イベントを配信するレスポンダツリールートレスポンダに設定します。

なお、SFYApplication::SFYApplication コンストラクタの処理により、 SFYApplication クラスが内部で保持するルートに配信エンジンが設定されています。 通常、この関数を呼び出す必要はありません。

[Note] 有効状態の変化

ルートレスポンダに配信エンジンを設定すると、ルートレスポンダの有効状態は OFF から ON に変化します。 これに伴い、レスポンダツリー上の各レスポンダでは、 状態フラグの設定内容に応じて状態が OFF から ON に変化して、 下記の状態イベントを受信します。

  • 有効状態が OFF から ON になる場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_VALID, true)
  • 可視状態が OFF から ON になる場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_VISIBLE, true)
  • 活性状態が OFF から ON になる場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_ACTIVE, true)
  • 操作可能状態が OFF から ON になる場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_ENABLE, true)
  • フォーカス状態が OFF から ON になる場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_FOCUS, true)

参照

SFYResponder::GetDistributer | SFYApplication::SFYApplication | SFYResponder::Invalidate | SFYApplication | SFZRoot | SFYResponder::Render | 配信エンジン | ルート | レスポンダツリー | ルートレスポンダ | 状態


SFYResponder::SetFrame
このレスポンダにフレームを装着します。
[ public ]
SFCError SetFrame(
    SFYResponderSmpConstRef param   // 装着するフレーム
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • param 引数がこのレスポンダであるとき、 またはparam 引数がアタッチメントフレームであるとき: SFERR_INVALID_PARAM
  • このレスポンダがアタッチメントフレームであるとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、 このレスポンダに引数に指定されたフレームを装着します。 このとき、 レスポンダに装着したフレームアタッチメントフレーム、 フレームが装着されたレスポンダをコンテントレスポンダと呼びます。

param 引数には、親レスポンダが設定されていない、 SFYFrame を継承するクラスのインスタンス(フレーム)を指定します。

一方、フレームを装着するこのレスポンダは、以下の 3 種類です。

  1. SFZWindow を継承するウィンドウ
  2. SFZDialog を継承するダイアログ
  3. SFYMenu を継承するメニュー

SFYResponder::SetFrame 関数の内部では、 コンテントレスポンダの実領域をフレーム余白領域のサイズだけ拡大した領域をアタッチメントフレームの実領域に設定する処理も行います。 そのため、コンテントレスポンダの実領域の設定は、 SFYResponder::SetFrame 関数の呼び出しよりも前に行うことも可能です。

装着するフレームは、 SFYResponder::SetState 関数を使用して、 可視、活性、操作可能、フォーカスの状態フラグ値を true に設定します。

各々のレスポンダは以下のフレームイベントを受信します。

  1. このレスポンダ: SFXEvent(SFEVT_RESPONDER_FRAME, SFP16_FRAME_FRAME, 装着するフレーム)
  2. 装着するフレーム: SFXEvent(SFEVT_RESPONDER_FRAME, SFP16_FRAME_CONTENT, このレスポンダ)
  3. 以前装着されていたフレーム: SFXEvent(SFEVT_RESPONDER_FRAME, SFP16_FRAME_CONTENT, null)

なお、この関数を実行する前にこのレスポンダにアタッチメントフレームが既に装着されていた場合、 そのアタッチメントフレームは通常のフレームに戻り、他のレスポンダに装着可能になります。

[Note] コンテントレスポンダからアタッチメントフレームをクリアする方法

コンテントレスポンダからアタッチメントフレームをクリアするには、 SFYResponder::SetFrame関数の引数に SFYResponderSmp::EmptyInstance() を指定します。 もしくは、SFYResponder::Terminate 関数を呼び出してアタッチメントフレームを閉じます。

このとき、 コンテントレスポンダは フレームイベント [SFXEvent(SFEVT_RESPONDER_FRAME, SFP16_FRAME_FRAME, null)]、 アタッチメントフレームは フレームイベント [SFXEvent(SFEVT_RESPONDER_FRAME, SFP16_FRAME_CONTENT, null)]を受信します。

[Note] アタッチメントフレームとコンテントレスポンダについて

アタッチメントフレームは、 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 | フレーム | アタッチメントフレームとコンテントレスポンダ | フレームイベント | 親レスポンダ | 子レスポンダ | 実領域 | 状態 | 配信エンジン


SFYResponder::SetID
指定された ID をこのレスポンダに設定します。
[ public ]
Void SetID(
    UInt32 param   // 設定する値
);

解説

この関数は、 指定された値をこのレスポンダのIDに設定します。

デフォルト値: 0

[Note] ID

ID とは、 レスポンダのインスタンス識別子として自由に設定できる 32ビット符号なし整数(UInt32 型)のことです。

[Caution] ID の重複

異なるレスポンダに同一の ID を設定できます。 ID は変更可能です。

[Note] 予約 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));
}

参照

SFYResponder::GetID | SFYResponder::Invalidate | ID


SFYResponder::SetParent
指定されたレスポンダをこのレスポンダの親レスポンダに設定します。
[ public ]
SFCError SetParent(
    SFYResponderSmpConstRef param   // 設定するレスポンダ
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • param 引数がこのレスポンダであるとき、 またはparam 引数がアタッチメントフレームであるとき: SFERR_INVALID_PARAM
  • このレスポンダがアタッチメントフレームであるとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、 指定されたレスポンダをこのレスポンダの親レスポンダに設定します。

このレスポンダは、param 引数に指定した親レスポンダが所属する レスポンダツリーに接続されます。

各々のレスポンダは以下の親子イベントを受信します。

  1. このレスポンダ: SFXEvent(SFEVT_RESPONDER_OWNER, SFP16_OWNER_PARENT, 新しい親レスポンダ)
  2. 新しい親レスポンダ: SFXEvent(SFEVT_RESPONDER_OWNER, SFP16_OWNER_REGISTER, このレスポンダ)
  3. 古い親レスポンダ: SFXEvent(SFEVT_RESPONDER_OWNER, SFP16_OWNER_UNREGISTER, このレスポンダ)

このレスポンダまたは子孫レスポンダの状態の ON / OFF が変化する場合、 該当するレスポンダは変化する状態に応じて以下の状態イベントを受信します。

  1. 可視状態: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_VISIBLE, true または false)
  2. 活性状態: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_ACTIVE, true または false)
  3. 操作可能状態: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_ENABLE, true または false)
  4. フォーカス状態: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_FOCUS, true または false)

[Note] 状態の ON / OFF

状態の ON / OFF の詳細については状態を参照してください。

[Note] 親レスポンダとして指定できないレスポンダ

param 引数にこのレスポンダ自身またはアタッチメントフレームを指定すると、SFERR_INVALID_PARAM が返ります。

このレスポンダがアタッチメントフレームである場合、SFERR_INVALID_STATE が返ります。

※ アタッチメントフレームの詳細については、 アタッチメントフレームとコンテントレスポンダを参照してください。

[Note] 親レスポンダをクリアする方法

親レスポンダを設定した直後、 このレスポンダは同じ親を持つ姉妹レスポンダの中で最背面に配置されます。 最前面に移動するには SFYResponder::ToFront 関数を呼び出す必要があります。

[Note] 注意

親レスポンダを持たないようにするには、 引数に SFYResponderSmp::EmptyInstance() を指定します。 もしくは、SFYResponder::Terminate 関数を呼び出して親レスポンダを終了します。

このとき、 このレスポンダは 親子イベント [SFXEvent(SFEVT_RESPONDER_OWNER, SFP16_OWNER_PARENT, null)]、 親レスポンダは 親子イベント [SFXEvent(SFEVT_RESPONDER_OWNER, SFP16_OWNER_UNREGISTER, このレスポンダ)]を受信します。

[Note] 親レスポンダに変化が無い場合

現在の親レスポンダを param 引数に指定した場合は、 親子関係に変化はないので親子イベント状態イベントも発生しません。

[Note] スマートポインタ

この関数を実行すると、レスポンダの参照カウントが 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]


SFYResponder::SetProperty
指定された属性をこのレスポンダに設定します。
[ public ]
Void SetProperty(
    Bool transparent   // 設定する値: 透過の場合は true、非透過の場合は false
);

解説

この関数は、 指定された属性をこのレスポンダに設定します。

デフォルト値: false

[Note] 注意

SFYResponder::SetPropertyTransparent 関数と同等です。

参照

SFYResponder::SetPropertyTransparent | SFYResponder::Invalidate | 属性


SFYResponder::SetPropertyTransparent
指定された透過属性をこのレスポンダに設定します。
[ public ]
Void SetPropertyTransparent(
    Bool param   // 設定する値
);

解説

この関数は、 指定された透過属性をこのレスポンダに設定します。

デフォルト値: false

視覚的なデザインに透過部分があるときは、透過属性を true に設定します。

透過属性が true に設定されている場合、 SFYWidget::SetBackgroundColor 関数で設定した背景色 (デフォルト:白色)で領域の背景は塗り潰されません。

[Note] 例外

ルートレスポンダ の透過属性を true に設定しても、 背景は透過になりません (SFYWidget::SetBackgroundColor 関数で設定した背景色で塗り潰されます)。

SFYApplication クラスが内部に保持しているルートでは、 透過属性を true に設定しても、その背景はSFYWidget::SetBackgroundColor 関数で設定した色 (デフォルト: 白色)で塗り潰されます。

[Note] 透過属性が true に設定されているクラス

以下のクラスでは、透過属性がデフォルトで true に設定されています。

SFYImageWidget | SFYSingleTextWidget | SFYSingleEditWidget | SFYMultipleTextWidget | SFYMultipleEditWidget | SFZSingleTextLabelControl | SFZSingleEditLabelControl | SFZMultipleTextLabelControl | SFZMultipleEditLabelControl | SFZImageLabelControl | SFZCheckboxControl | SFZRadiobuttonControl

参照

SFYResponder::GetPropertyTransparent | SFYResponder::SetProperty | SFYWidget::SetBackgroundColor| SFYResponder::Invalidate | 属性 | ルートレスポンダ | ルート


SFYResponder::SetRealBound
指定された領域をこのレスポンダの実領域に設定します。
[ 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, 変更後の仮想領域)] も受信します。

[Tip] 領域イベント[SFEVT_RESPONDER_BOUND]の処理

SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_REAL, 変更後の実領域)、 SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL, 変更後の仮想領域) イベントのハンドラは、 それぞれ SFYWidget::HandleBoundRealSFYWidget::HandleBoundVirtual 仮想関数をオーバーライドして実装します。 あるいは、 領域イベント専用ハンドラを定義、実装してレスポンダに登録する方法も可能です。

[Caution] 実領域と仮想領域

SFYResponder::SetRealBound 関数を使用して実領域を小さくすると、 仮想領域は実領域よりも大きくなります。

[Tip] Tip

実領域よりも大きな仮想領域を持つ必要のないレスポンダでは、 SFYWidget::HandleBoundReal 関数をオーバーライドして仮想領域を実領域に一致させるとよいでしょう。

SFYControl::HandleBoundReal 関数は、 仮想領域を実領域に一致させるようにオーバーライドしています。

[Note] アタッチメントフレーム / コンテントレスポンダの場合

アタッチメントフレームまたはコンテントレスポンダの何れか一方の実領域を設定すれば、 もう片方の実領域はアタッチメントフレームのフレーム余白領域を基に計算して自動的に設定されます。

アタッチメントフレーム / コンテントレスポンダについては、 アタッチメントフレームとコンテントレスポンダを参照してください。

[Note] [非推奨(廃止予定)]グローバル領域イベントについて

この関数の処理により、 このレスポンダとその子孫レスポンダは、 可視状態にある時に限り、 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]


SFYResponder::SetReference
指定された値をこのレスポンダのリファレンスに設定します。
[ public ]
Void SetReference(
    VoidPtr param   // 設定する値
);

解説

この関数は、 指定された値をこのレスポンダのリファレンスに設定します。

デフォルト値: null

[Note] リファレンス

リファレンスとは、 レスポンダのインスタンス識別子として自由に設定できる 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());

参照

SFYResponder::GetReference | SFYResponder::Invalidate | リファレンス


SFYResponder::SetRenderer
指定された描画エンジンをこのレスポンダに設定します。
[ public ]
Void SetRenderer(
    SFYRendererPtr param   // 設定する値
);

解説

この関数は、 指定された描画エンジンこのレスポンダにを設定します。

[Note] 注意

描画エンジンは、 描画対象のレスポンダツリールートレスポンダに設定します。

なお、SFYApplication::SFYApplication コンストラクタの処理により、 SFYApplication クラスが内部で保持するルートに描画エンジンが設定されています。 通常、この関数を呼び出す必要はありません。

参照

SFYResponder::GetRenderer | SFYApplication::SFYApplication | SFYResponder::Invalidate | SFYApplication | SFZRoot | 描画エンジン | ルート


SFYResponder::SetState
指定された値をこのレスポンダの可視、活性、操作可能、フォーカスの各状態フラグに設定します。
[ public ]
Void SetState(
    Bool visible   // 可視状態の値
    Bool active    // 活性状態の値
    Bool enable    // 操作可能状態の値
    Bool focus     // フォーカス状態の値
);

解説

この関数は、 指定された値をこのレスポンダの可視、活性、操作可能、フォーカスの各状態フラグにまとめて設定します。

[Note] デフォルト値

可視、活性、操作可能、フォーカスの各状態のフラグの初期値は false です。

[Note] フォーカス状態フラグについて

この関数を呼び出す直前、 このレスポンダの可視、活性、操作可能、フォーカスのすべての状態のフラグ値が 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. 可視、活性、操作可能の状態フラグは、 この関数の対応する各引数に指定した値が無条件にそのまま設定されます。

[Note] 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]


SFYResponder::SetStateActive
指定された値をこのレスポンダの活性状態フラグに設定します。
[ public ]
Void SetStateActive(
    Bool param   // 設定する値
);

解説

この関数は、 指定された値をこのレスポンダの活性状態フラグに設定します。

デフォルト値: false

状態の ON / OFF が変化する場合、 該当するこのレスポンダや子孫レスポンダは下記の状態イベントを受信します。

  • SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_ACTIVE, 引数に指定した値)
  • SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_ENABLE, 引数に指定した値)
  • SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_FOCUS, 引数に指定した値)

[Note] 注意

レスポンダが実際に活性状態であるとき、 活性状態は ON であると言います。

[Note] 活性状態が ON になるための条件
  1. このレスポンダの活性状態フラグが true である
  2. このレスポンダの可視状態が ON である
  3. (もし存在するなら)親レスポンダの活性状態も ON である
[Note] 状態の ON / OFF

詳細は状態を参照してください。

[Note] このレスポンダおよび子孫レスポンダ内での状態イベント受信順序

状態イベントの P32 パラメータが true の場合(状態 が OFF → ON に変化するとき): 背面から前面のレスポンダの順、同一レスポンダ内では優先順位の高い状態から低い状態の順に受信します。

状態イベントの P32 パラメータが false の場合(状態 が ON → OFF に変化するとき): 前面から背面のレスポンダの順、同一レスポンダ内では優先順位の低い状態から高い状態の順に受信します。

状態の優先順位は、

    有効状態 > 可視状態 > 活性状態 > 操作可能状態 > フォーカス状態

の順になります(有効状態が一番高い)。

[Caution] フォーカス状態フラグについて

この関数を呼び出す直前、 このレスポンダの可視、活性、操作可能、フォーカスのすべての状態のフラグ値が 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]


SFYResponder::SetStateEnable
指定された値をこのレスポンダの操作可能状態フラグに設定します。
[ public ]
Void SetStateEnable(
    Bool param   // 設定する値
);

解説

この関数は、 指定された値をこのレスポンダの操作可能状態フラグに設定します。

デフォルト値: false

状態の ON / OFF が変化する場合、 該当するこのレスポンダや子孫レスポンダは下記の状態イベントを受信します。

  • 操作可能状態の ON / OFF が変化する場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_ENABLE, true または false)
  • フォーカス状態の ON / OFF が変化する場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_FOCUS, true または false)

[Note] 注意

レスポンダが実際に操作可能であるとき、 操作可能状態は ON であると言います。

[Note] 操作可能状態が ON になるための条件
  1. このレスポンダの操作可能状態フラグが true である
  2. このレスポンダの活性状態が ON である
  3. (もし存在するなら)親レスポンダの操作可能状態も ON である
[Note] 状態の ON / OFF

詳細は状態を参照してください。

[Note] このレスポンダおよび子孫レスポンダ内での状態イベント受信順序

状態イベントの P32 パラメータが true の場合(状態 が OFF → ON に変化するとき): 背面から前面のレスポンダの順、同一レスポンダ内では優先順位の高い状態から低い状態の順に受信します。

状態イベントの P32 パラメータが false の場合(状態 が ON → OFF に変化するとき): 前面から背面のレスポンダの順、同一レスポンダ内では優先順位の低い状態から高い状態の順に受信します。

[Tip] Tip
状態の優先順位は、有効状態、可視状態、活性状態、操作可能状態、フォーカス状態の順になります(有効状態が一番高い)。
[Caution] フォーカス状態フラグについて

この関数を呼び出す直前、 このレスポンダの可視、活性、操作可能、フォーカスのすべての状態のフラグ値が 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]


SFYResponder::SetStateFocus
指定された値をこのレスポンダのフォーカス状態フラグに設定します。
[ public ]
Void SetStateFocus(
    Bool param   // 設定する値
);

解説

この関数は、 指定された値をこのレスポンダのフォーカス状態フラグに設定します。

デフォルト値: false

[Caution] 注意

このレスポンダの可視、活性、または操作可能の状態フラグの値が false であるとき (フォーカス状態フラグの値は false)、 param 引数に true を指定してこの関数を呼び出しても、 フォーカス状態フラグは true に設定されません。

このレスポンダの可視、活性、操作可能の状態フラグの値がすべて true である場合に限り、 フォーカス状態フラグは true に設定されます。

状態の ON / OFF が変化する場合、 該当するこのレスポンダや子孫レスポンダは下記の状態イベントを受信します。

  • フォーカス状態の ON / OFF が変化する場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_FOCUS, true または false)

[Note] 注意

レスポンダが実際にフォーカスされているとき、 フォーカス状態は ON であると言います。

[Note] フォーカス状態が ON になるための条件
  1. このレスポンダのフォーカス状態フラグが true である
  2. このレスポンダの操作可能状態が ON である
  3. (もし存在するなら)親レスポンダのフォーカス状態も ON である
[Note] 状態の ON / OFF

詳細は状態を参照してください。

[Note] このレスポンダおよび子孫レスポンダ内での状態イベント受信順序

状態イベントの P32 パラメータが true の場合(状態 が OFF → ON に変化するとき): 背面から前面のレスポンダの順、同一レスポンダ内では優先順位の高い状態から低い状態の順に受信します。

状態イベントの P32 パラメータが false の場合(状態 が ON → OFF に変化するとき): 前面から背面のレスポンダの順、同一レスポンダ内では優先順位の低い状態から高い状態の順に受信します。

[Tip] Tip
状態の優先順位は、有効状態、可視状態、活性状態、操作可能状態、フォーカス状態の順になります(有効状態が一番高い)。
[Caution] フォーカス状態のフラグ値について

この関数を呼び出す直前、 このレスポンダの可視、活性、操作可能、フォーカスのすべての状態のフラグ値が true であったとします (このレスポンダがフォーカスを持っていたとします)。

このとき、 SFYResponder::SetStateVisibleSFYResponder::SetStateActive、または SFYResponder::SetStateEnable 関数を呼び出してフォーカス状態以外の状態フラグを false に設定した場合、 このレスポンダのフォーカス状態フラグの値は強制的に false に変更されます (このレスポンダは、フォーカスされていない状態になります)。

そして、もし存在すれば、1 つだけ背面にある操作可能な姉妹レスポンダ (存在しない場合は、1 つだけ前面にある操作可能な姉妹レスポンダ) のフォーカス状態フラグが false から true に変更されます (フォーカスはその姉妹レスポンダに移動します)。

この直後、 再びこのレスポンダをフォーカスされた状態にするには、 上の関数呼び出しで変更した状態のフラグを true に戻すだけでなく、 SFYResponder::SetStateFocus 関数を呼び出してこのレスポンダのフォーカス状態フラグも true に設定する必要があります。

※1. フォーカス状態フラグを true に設定するには、 SFYResponder::SetStateFocus 関数を呼び出す前に、 可視、活性、操作可能の状態フラグを true に設定しておく必要があります。 もしくは、すべての引数に true を指定して SFYResponder::SetState 関数を呼び出します。

※2. 操作可能なレスポンダとは、 可視、活性、操作可能の状態フラグの値が true であるレスポンダのことです。

[Caution] 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]


SFYResponder::SetStateVisible
指定された値をこのレスポンダの可視状態フラグに設定します。
[ public ]
Void SetStateVisible(
    Bool param   // 設定する値
);

解説

この関数は、 指定された値をこのレスポンダの可視状態フラグに設定します。

デフォルト値: false

状態の ON / OFF が変化する場合、 該当するこのレスポンダや子孫レスポンダは下記の状態イベントを受信します。

  • 可視状態の ON / OFF が変化する場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_VISIBLE, true または false)
  • 活性状態の ON / OFF が変化する場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_ACTIVE, true または false)
  • 操作可能状態の ON / OFF が変化する場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_ENABLE, true または false)
  • フォーカス状態の ON / OFF が変化する場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_FOCUS, true または false)

[Note] 注意

レスポンダが実際に見えるとき、 可視状態は ON であると言います。

[Note] 可視状態が ON になるための条件
  1. このレスポンダの可視状態フラグが true である
  2. このレスポンダの有効状態が ON である
  3. (もし存在するなら)親レスポンダの可視状態も ON である
[Note] 有効状態が ON になるための条件
  1. このレスポンダの有効状態フラグが true である
  2. (もし存在するなら)親レスポンダの有効状態も ON である
  3. このレスポンダがルートレスポンダであるのならば、 配信エンジンが設定されていること
[Note] 状態の ON / OFF

詳細は状態を参照してください。

[Note] このレスポンダおよび子孫レスポンダ内での状態イベント受信順序

状態イベントの P32 パラメータが true の場合(状態 が OFF → ON に変化するとき): 背面から前面のレスポンダの順、同一レスポンダ内では優先順位の高い状態から低い状態の順に受信します。

状態イベントの P32 パラメータが false の場合(状態 が ON → OFF に変化するとき): 前面から背面のレスポンダの順、同一レスポンダ内では優先順位の低い状態から高い状態の順に受信します。

[Tip] Tip
状態の優先順位は、有効状態、可視状態、活性状態、操作可能状態、フォーカス状態の順になります(有効状態が一番高い)。
[Caution] フォーカス状態フラグについて

この関数を呼び出す直前、 このレスポンダの可視、活性、操作可能、フォーカスのすべての状態のフラグ値が 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]


SFYResponder::SetType
指定された値をこのレスポンダのタイプに設定します。
[ protected ]
Void SetType(
    SFCType param   // 設定する値
);

解説

この関数は、 指定された値をこのレスポンダのタイプに設定します。

デフォルト値: 親クラスのタイプ

[Note] タイプ

タイプとは、 レスポンダのクラス識別子として自由に設定できる 4 文字リテラルfour_char_code マクロで定義します)のことです。

使用例

以下は、USRResponder クラスのタイプを設定するコードです。

USRResponder::USRResponder(Void) static_throws
{
    if (static_try()) {

        // タイプは必ずこの場所で設定する
        // このようにすると親クラスのコンストラクタ内でエラーが発生した場合は
        // 親クラスのタイプが保持され、自クラスのコンストラクタ内でエラーが
        // 発生した場合は自クラスのタイプが設定されるようになる
        // 外部からこのクラスを利用する場合にエラーの発生個所を特定しやすくなる
        SetType(four_char_code('U', 'R', 'S', 'P'));

        // その他の初期化処理を記述する
        ...
    }
}

参照

SFYResponder::GetType | SFYResponder::Invalidate | タイプ


SFYResponder::SetVirtualBound
指定された領域をこのレスポンダの仮想領域に設定します。
[ public ]
Void SetVirtualBound(
    SFXRectangleConstRef param   // 設定する値
);

解説

この関数は、 指定された領域をこのレスポンダの仮想領域に設定します。

デフォルト値: SFXRectangle(0, 0, 0, 0)

[Tip] Tip
[ 仮想領域 ≧ 実領域 ] なので、[ 仮想領域 = 実領域 ] のときに実領域を大きくすると、 仮想領域もそれに合わせて大きくなります。

仮想領域が変更されたとき、 このレスポンダは領域イベント[SFEVT_RESPONDER_BOUND] [SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL, 変更後の仮想領域)] を受信します。

[Note] 注意

仮想領域の設定内容に応じてローカル領域のサイズは変化しますが、 実領域は変化しません。

[Tip] 領域イベント[SFEVT_RESPONDER_BOUND]の処理

SFXEvent(SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL, 変更後の仮想領域) イベントの処理は、 それぞれ SFYWidget::HandleBoundVirtual 仮想関数をオーバーライドして実装します。 あるいは、 領域イベント専用ハンドラを定義、実装してレスポンダに登録する方法も可能です。

[Note] [非推奨(廃止予定)]グローバル領域イベントについて

この関数の処理により、 このレスポンダとその子孫レスポンダは、 可視状態にある時に限り、 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] | コールバック型


SFYResponder::Snapshot
デバイス画面保存用ビットマップからこのレスポンダとレスポンダ空間との交差領域のスナップショットを取得します。
[ public, const ]
SFCError Snapshot(
    SFBBitmapSmpConstRef bitmap   // 保存先ビットマップ
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • このレスポンダに描画エンジン(SFYRenderer)が設定されていないとき: SFERR_INVALID_STATE
  • 保存先ビットマップ bitmap が null のとき: SFERR_INVALID_PARAM

解説

この関数は、 デバイス画面保存用ビットマップからこのレスポンダとレスポンダ空間との交差領域分のイメージを指定されたビットマップに転送します。

交差領域の前面に他のレスポンダが重なる場合、そのレスポンダのイメージもビットマップに転送されます。

参照

SFYResponder::GetRenderer | 描画エンジン


SFYResponder::Terminate
このレスポンダの終了処理を行います。
[ public ]
Void Terminate(Void);

解説

この関数は、 以下の手順でこのレスポンダの終了処理を行います。

  • このレスポンダと子レスポンダとの親子関係を解消します。
  • このレスポンダの有効状態フラグを false に設定します。
  • このレスポンダと親レスポンダとの親子関係を解消します。
[Note] アタッチメントフレームまたはコンテントレスポンダの終了

このレスポンダが SFYResponder::SetFrame 関数によりアタッチメントフレームが装着されたコンテントレスポンダである場合は、 アタッチメントフレームはコンテントレスポンダから切り離されて見えなくなり、 他のレスポンダに装着可能な通常のフレームに戻ります。

逆に、このレスポンダがアタッチメントフレームである場合は、 アタッチメントフレームだけが見えなくなり、以後使用できなくなります。 コンテントレスポンダはそのままです。

このとき、 各々のレスポンダは以下のフレームイベントを受信します。

  1. コンテントレスポンダ: SFXEvent(SFEVT_RESPONDER_FRAME, SFP16_FRAME_FRAME, null)]
  2. アタッチメントフレーム: SFXEvent(SFEVT_RESPONDER_FRAME, SFP16_FRAME_CONTENT, null)

アタッチメントフレーム、コンテントレスポンダ共に親子イベントを受信しません。

※ アタッチメントフレームの詳細については、 アタッチメントフレームとコンテントレスポンダを参照してください。

[Tip] Tip

SFYResponder::Terminate 関数は、 レスポンダの参照カウントが 0 になったタイミングで自動的に呼び出されます。 そのため、ほとんどのレスポンダではこの関数を呼び出す必要はありません。

ダイアログやメニューなどのように参照カウントが 0 になる前にレスポンダを終了したい(閉じたい)ときに、 明示的に SFYResponder::Terminate 関数を呼び出して使います。 このとき、参照カウントはまだ 0 でないため、 この関数を実行した後もレスポンダはそのままヒープメモリに残ったままです。 強制的にヒープメモリから解放するには、 レスポンダを参照しているスマートポインタの変数に別のレスポンダを代入する、 あるいは、明示的に SFXResponderPointer::Release 関数を呼び出すなどして参照カウントを 0 にする必要があります。

[Note] 状態イベントの発生

このレスポンダと子レスポンダとの親子関係を解消する前に、 一旦、子レスポンダのすべての状態フラグを false に設定します。 その結果、下記の該当する子孫レスポンダは下記の状態イベントを受信します。

  • 可視状態が ON から OFF になる場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_VISIBLE, false)
  • 活性状態が ON から OFF になる場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_ACTIVE, false)
  • 操作可能状態が ON から OFF になる場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_ENABLE, false)
  • フォーカス状態が ON から OFF になる場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_FOCUS, false)

子レスポンダとの親子関係を解消した後、子レスポンダのすべての状態フラグを元の状態に戻します。 その結果、子レスポンダを頂点とする新たなレスポンダツリーが作成されます。 通常、子レスポンダには、 配信エンジンが設定されていないので有効状態は OFF となります。 そのため、子孫レスポンダはすべての状態フラグの値が復元しても状態イベントを受信しません。

次に、このレスポンダの有効状態フラグが "false" に設定されたときに、 このレスポンダは状態イベント [SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_VALID, false)]を受信します。 また、これに伴う各種状態の変化に応じて下記の状態イベントを受信します。

  • 可視状態が ON から OFF になる場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_VISIBLE, false)
  • 活性状態が ON から OFF になる場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_ACTIVE, false)
  • 操作可能状態が ON から OFF になる場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_ENABLE, false)
  • フォーカス状態が ON から OFF になる場合: SFXEvent(SFEVT_RESPONDER_STATE, SFP16_STATE_FOCUS, false)

[Note] 親子イベントの発生

親子関係の解消に伴い、 親レスポンダと子レスポンダはそれぞれ下記の親子イベントを受信します。

  • 子レスポンダを持たなくなる親レスポンダ: SFXEvent(SFEVT_RESPONDER_OWNER, SFP16_OWNER_UNREGISTER, 子レスポンダ)
  • 親レスポンダを持たなくなる子レスポンダ: SFXEvent(SFEVT_RESPONDER_OWNER, SFP16_OWNER_PARENT, null)

[Note] 子レスポンダの終了と解放

子レスポンダは、参照カウントが 0 になると、 SFYResponder::Terminate 関数が自動的に呼び出されて終了します。 そして、ヒープメモリからも解放されます。

通常、子レスポンダはこのレスポンダのクラス変数として保持されるので、 子レスポンダの参照カウントは、 このレスポンダがヒープメモリから解放されるタイミングで 0 になります。

[Caution] 注意

この関数を使用して終了したレスポンダに対して SFYResponder::Initialize 関数を呼び出して再び初期化することは禁止されています。

[Note] 状態の 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] | フレームイベント


SFYResponder::ToBack
このレスポンダを指定された条件の姉妹レスポンダのなかで最背面に移動します。
[ 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] Tip

検索に含める姉妹レスポンダを ID、 可視、活性、操作可能、フォーカスの状態で制限できます。

なお、アタッチメントフレームは、検索の対象外です。

[Note] 注意

この関数を実行した後、 このレスポンダは指定された条件の姉妹レスポンダのなかで一番下の妹レスポンダになります。

使用例

すべての姉妹レスポンダの中で最背面に移動する方法
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]


SFYResponder::ToFront
このレスポンダを指定された条件の姉妹レスポンダのなかで最前面に移動します。
[ 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] Tip

検索に含める姉妹レスポンダを ID、 可視、活性、操作可能、フォーカスの状態で制限できます。

なお、アタッチメントフレームは、検索の対象外です。

[Note] 注意

この関数を実行した後、 このレスポンダは指定された条件の姉妹レスポンダのなかで一番上の姉レスポンダになります。

使用例

すべての姉妹レスポンダの中で最前面に移動する方法
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]


SFYResponder::ToNthBackward
このレスポンダを指定された条件の姉妹レスポンダのなかで背面から数えて指定された位置に移動します。
[ 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] Tip

検索に含める姉妹レスポンダを ID、 可視、活性、操作可能、フォーカスの状態で制限できます。

なお、アタッチメントフレームは、検索の対象外です。

[Note] 注意

この関数を実行した後、 このレスポンダは指定された条件の姉妹レスポンダのなかで下から数えて指定された順番の妹レスポンダになります。

使用例

すべての姉妹レスポンダの中で背面から 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]


SFYResponder::ToNthForward
このレスポンダを指定された条件の姉妹レスポンダのなかで前面から数えて指定された位置に移動します。
[ 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] Tip

検索に含める姉妹レスポンダを ID、 可視、活性、操作可能、フォーカスの状態で制限できます。

なお、アタッチメントフレームは、検索の対象外です。

[Note] 注意

この関数を実行した後、 このレスポンダは指定された条件の姉妹レスポンダのなかで上から数えて指定された順番の姉レスポンダになります。

使用例

すべての姉妹レスポンダの中で前面から 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]


SFYResponder::UnregisterHandler
このレスポンダから指定されたハンドラの登録を解除します。
[ 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                        // 配列の要素数
);

引数

range

ハンドラ規則が適用されるイベントの範囲を表します。

rule

ハンドラ関数とリファレンス値のセットを表します。

解説

この関数は、 このレスポンダから指定されたハンドラの登録を解除します。

登録が解除されるハンドラは、イベント範囲とハンドラ規則が完全に一致するものに限ります。

同じ条件のハンドラが複数個登録されているときは、最後に登録されたハンドラが解除されます。

参照

SFYResponder::RegisterHandler | SFYResponder::ClearHandler | SFXEvent | SFXEventRange | ハンドラ


SFYResponder::UnregisterTracer
このレスポンダのトレーサから指定された配信規則の登録を解除します。
[ public ]
Void UnregisterTracer(
    SFXEventRangeConstRef range   // イベント範囲
);
[ public ]
Void UnregisterTracer(
    SFXEventRangeConstPtr range   // イベント範囲の配列
    SInt32 length                 // 配列の要素数
);

引数

range

イベントの範囲を表します。

解説

この関数は、 このレスポンダのトレーサから指定された配信規則の登録を解除します。

登録が解除されるトレーサの配信規則は、イベント範囲が完全に一致するものに限ります。

同じ条件の配信規則が複数個登録されているときは、 最後に登録された配信規則が解除されます。

参照

SFYResponder::RegisterTracer | SFYResponder::ClearTracer | SFXEvent | SFXEventRange | トレーサ


SFYResponder::CodeEnum
SFYResponder クラスを表す定数です。
enum CodeEnum {
    CODE_TYPE = four_char_code('.', 'r', 's', 'p')
};
SFMTYPEDEFTYPE(CodeEnum)

参照

SFYResponder::GetType | SFYResponder::SetType


SFYResponder::HorizontalEnum
水平方向のアライメントを表す定数です。
enum HorizontalEnum {
    HORIZONTAL_LEFT     = 0,                 // 左詰め
    HORIZONTAL_CENTER,                       // 中央揃え
    HORIZONTAL_RIGHT                         // 右詰め
};
SFMTYPEDEFTYPE(HorizontalEnum)

解説

水平方向のアライメントについて

  1. 左詰めの場合 : 最適な領域の左辺をヒント領域の左辺に一致させます。
  2. 中央揃えの場合 : 最適な領域の垂直方向の中線をヒント領域の垂直方向の中線に一致させます。
  3. 右詰めの場合 : 最適な領域の右辺をヒント領域の右辺に一致させます。

参照

SFYResponder::VerticalEnum | SFYResponder::GetSuitableBound


SFYResponder::VerticalEnum
垂直方向のアライメントを表す定数です。
enum VerticalEnum {
    VERTICAL_TOP      = 0,               // 上詰め
    VERTICAL_MIDDLE,                     // 中央揃え
    VERTICAL_BOTTOM                      // 下詰め
};
SFMTYPEDEFTYPE(VerticalEnum)

解説

垂直方向のアライメントについて:

  1. 上詰めの場合 : 最適な領域の上辺をヒント領域の上辺に一致させます。
  2. 中央揃えの場合 : 最適な領域の水平方向の中線をヒント領域の水平方向の中線に一致させます。
  3. 下詰めの場合 : 最適な領域の下辺をヒント領域の下辺に一致させます。

参照

SFYResponder::HorizontalEnum | SFYResponder::GetSuitableBound