25.3. SFY レスポンダシステム用マクロ(新レスポンダシステム)
レスポンダにてイベントを受信するには、ハンドラマクロを利用してハンドラを作成します。
ハンドラには汎用ハンドラと特定のイベントに特化された専用ハンドラがあり、それぞれ汎用ハンドラマクロと専用ハンドラマクロが用意されています。
いくつかのハンドラマクロには戻り値を省略する VOID タイプと戻り値を明記する BOOL タイプがあります。
戻り値を省略する場合、戻り値は true であると判断されます。
参照:
ハンドラ |
SFXEvent |
SFXEventRange |
SFCEventEnum
25.3.1. 引数のない汎用ハンドラ[XANDLER_DECLARE_VOIDVOID または XANDLER_DECLARE_BOOLVOID]
例 25.1. ハンドラ宣言
XANDLER_DECLARE_VOIDVOID(FUNCTION)
XANDLER_DECLARE_BOOLVOID(FUNCTION)
表 25.7. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
例 25.2. ハンドラ実装
XANDLER_IMPLEMENT_VOIDVOID(CLASS, FUNCTION, invoker)
{
return;
}
XANDLER_IMPLEMENT_BOOLVOID(CLASS, FUNCTION, invoker)
{
return false;
}
表 25.8. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
25.3.3. アプリ開始イベント専用ハンドラ[XANDLER_DECLARE_VOIDSTART または XANDLER_DECLARE_BOOLSTART]
例 25.5. ハンドラ宣言
XANDLER_DECLARE_VOIDSTART(FUNCTION)
XANDLER_DECLARE_BOOLSTART(FUNCTION)
表 25.11. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
例 25.6. ハンドラ実装
XANDLER_IMPLEMENT_VOIDSTART(CLASS, FUNCTION, invoker, environment)
{
return;
}
XANDLER_IMPLEMENT_BOOLSTART(CLASS, FUNCTION, invoker, environment)
{
return false;
}
表 25.12. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
AEEAppStart* 型変数名 |
開始情報を表します。 |
参照:
アプリ開始イベント[SFEVT_APP_START]
25.3.4. アプリ終了イベント専用ハンドラ[XANDLER_DECLARE_VOIDSTOP または XANDLER_DECLARE_BOOLSTOP]
例 25.7. ハンドラ宣言
XANDLER_DECLARE_VOIDSTOP(FUNCTION)
XANDLER_DECLARE_BOOLSTOP(FUNCTION)
表 25.13. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
例 25.8. ハンドラ実装
XANDLER_IMPLEMENT_VOIDSTOP(CLASS, FUNCTION, invoker, quitable)
{
return;
}
XANDLER_IMPLEMENT_BOOLSTOP(CLASS, FUNCTION, invoker, quitable)
{
return false;
}
表 25.14. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
BoolPtr 型変数名 |
終了確認を表します。 |
参照:
アプリ終了イベント[SFEVT_APP_STOP]
25.3.5. アプリ再開イベント専用ハンドラ[XANDLER_DECLARE_VOIDRESUME または XANDLER_DECLARE_BOOLRESUME]
例 25.9. ハンドラ宣言
XANDLER_DECLARE_VOIDRESUME(FUNCTION)
XANDLER_DECLARE_BOOLRESUME(FUNCTION)
表 25.15. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
例 25.10. ハンドラ実装
XANDLER_IMPLEMENT_VOIDRESUME(CLASS, FUNCTION, invoker, environment)
{
return;
}
XANDLER_IMPLEMENT_BOOLRESUME(CLASS, FUNCTION, invoker, environment)
{
return false;
}
表 25.16. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
AEEAppStart* 型変数名 |
再開情報を表します。 |
参照:
アプリ再開イベント[SFEVT_APP_RESUME]
25.3.6. アプリ中断イベント専用ハンドラ[XANDLER_DECLARE_VOIDSUSPEND または XANDLER_DECLARE_BOOLSUSPEND]
例 25.11. ハンドラ宣言
XANDLER_DECLARE_VOIDSUSPEND(FUNCTION)
XANDLER_DECLARE_BOOLSUSPEND(FUNCTION)
表 25.17. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
例 25.12. ハンドラ実装
XANDLER_IMPLEMENT_VOIDSUSPEND(CLASS, FUNCTION, invoker, reason, info)
{
return;
}
XANDLER_IMPLEMENT_BOOLSUSPEND(CLASS, FUNCTION, invoker, reason, info)
{
return false;
}
表 25.18. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
AEESuspendReason 型変数名 |
中断原因を表します。 |
5 |
AEESuspendInfo* 型変数名 |
中断情報を表します。 |
参照:
アプリ中断イベント[SFEVT_APP_SUSPEND]
25.3.7. 親子イベント専用ハンドラ[XANDLER_DECLARE_VOIDOWNER]
例 25.13. ハンドラ宣言
XANDLER_DECLARE_VOIDOWNER(FUNCTION)
表 25.19. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
例 25.14. ハンドラ実装
XANDLER_IMPLEMENT_VOIDOWNER(CLASS, FUNCTION, invoker, reason, responder)
{
return;
}
表 25.20. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
SFYResponderPtr 型変数名 |
通知するレスポンダを表します。 |
参照:
親子イベント[SFEVT_RESPONDER_OWNER]
25.3.8. 領域イベント専用ハンドラ[XANDLER_DECLARE_VOIDBOUND]
例 25.15. ハンドラ宣言
XANDLER_DECLARE_VOIDBOUND(FUNCTION)
表 25.21. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
例 25.16. ハンドラ実装
XANDLER_IMPLEMENT_VOIDBOUND(CLASS, FUNCTION, invoker, reason, rectangle)
{
return;
}
表 25.22. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
SFXRectanglePtr 型変数名 |
通知する矩形を表します。 |
参照:
領域イベント[SFEVT_RESPONDER_BOUND]
25.3.9. 余白イベント専用ハンドラ[XANDLER_DECLARE_VOIDMARGIN]
例 25.17. ハンドラ宣言
XANDLER_DECLARE_VOIDMARGIN(FUNCTION)
表 25.23. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
例 25.18. ハンドラ実装
XANDLER_IMPLEMENT_VOIDMARGIN(CLASS, FUNCTION, invoker, reason, margin)
{
return;
}
表 25.24. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
SFXMarginPtr 型変数名 |
通知する余白を表します。 |
参照:
余白イベント[SFEVT_RESPONDER_MARGIN]
25.3.10. 状態イベント専用ハンドラ[XANDLER_DECLARE_VOIDSTATE]
例 25.19. ハンドラ宣言
XANDLER_DECLARE_VOIDSTATE(FUNCTION)
表 25.25. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
例 25.20. ハンドラ実装
XANDLER_IMPLEMENT_VOIDSTATE(CLASS, FUNCTION, invoker, reason, state)
{
return;
}
表 25.26. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
Bool 型変数名 |
通知する状態を表します。 |
参照:
状態イベント[SFEVT_RESPONDER_STATE]
25.3.11. フォーカスイベント専用ハンドラ[XANDLER_DECLARE_VOIDFOCUS]
例 25.21. ハンドラ宣言
XANDLER_DECLARE_VOIDFOCUS(FUNCTION)
表 25.27. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
例 25.22. ハンドラ実装
XANDLER_IMPLEMENT_VOIDFOCUS(CLASS, FUNCTION, invoker, reason, focus)
{
return;
}
表 25.28. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
Bool 型変数名 |
フォーカスの状態を表します。 |
参照:
フォーカスイベント[SFEVT_RESPONDER_FOCUS]
25.3.12. 描画イベント専用ハンドラ[XANDLER_DECLARE_VOIDRENDER]
例 25.23. ハンドラ宣言
XANDLER_DECLARE_VOIDRENDER(FUNCTION)
表 25.29. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
例 25.24. ハンドラ実装
XANDLER_IMPLEMENT_VOIDRENDER(CLASS, FUNCTION, invoker, reason, graphics)
{
return;
}
表 25.30. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
SFXGraphicsPtr 型変数名 |
グラフィックスオブジェクトを表します。 |
参照:
描画イベント[SFEVT_RESPONDER_RENDER]
25.3.13. スタイルイベント専用ハンドラ[XANDLER_DECLARE_VOIDSTYLE]
例 25.25. ハンドラ宣言
XANDLER_DECLARE_VOIDSTYLE(FUNCTION)
表 25.31. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
例 25.26. ハンドラ実装
XANDLER_IMPLEMENT_VOIDSTYLE(CLASS, FUNCTION, invoker, reason)
{
return;
}
表 25.32. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
参照:
スタイルイベント[SFEVT_RESPONDER_STYLE]
25.3.14. 値イベント専用ハンドラ[XANDLER_DECLARE_VOIDVALUE]
例 25.27. ハンドラ宣言
XANDLER_DECLARE_VOIDVALUE(FUNCTION)
表 25.33. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
例 25.28. ハンドラ実装
XANDLER_IMPLEMENT_VOIDVALUE(CLASS, FUNCTION, invoker, reason, value)
{
return;
}
表 25.34. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
SInt32 型変数名 |
通知する値を表します。 |
参照:
値イベント[SFEVT_RESPONDER_VALUE]
25.3.15. 結果イベント専用ハンドラ[XANDLER_DECLARE_VOIDRESULT]
例 25.29. ハンドラ宣言
XANDLER_DECLARE_VOIDRESULT(FUNCTION)
表 25.35. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
例 25.30. ハンドラ実装
XANDLER_IMPLEMENT_VOIDRESULT(CLASS, FUNCTION, invoker, reason, result)
{
return;
}
表 25.36. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
SInt32 型変数名 |
通知する結果を表します。 |
参照:
結果イベント[SFEVT_RESPONDER_RESULT]
25.3.16. スクロールバーイベント専用ハンドラ[XANDLER_DECLARE_VOIDSCROLLBAR]
例 25.31. ハンドラ宣言
XANDLER_DECLARE_VOIDSCROLLBAR(FUNCTION)
表 25.37. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
例 25.32. ハンドラ実装
XANDLER_IMPLEMENT_VOIDSCROLLBAR(CLASS, FUNCTION, invoker, reason)
{
return;
}
表 25.38. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラに用いるクラス関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
参照:
スクロールバーイベント[SFEVT_RESPONDER_SCROLLBAR]
例 25.33. ハンドラのエントリ名を取得するマクロ
#define XANDLER_FUNCTION(FUNCTION) FUNCTION##SHP
表 25.39. マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
エントリ名の取得に用いるクラス関数名を表します。 |
|
XANDLER_FUNCTION マクロの利用シーン |
複数のハンドラをまとめて登録するときに使います。
|
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)];
SFCError error;
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));
例 25.34. ヌル ハンドラを取得するマクロ
#define XANDLER_NULL (null), (null)
例 25.35. 内部のインスタンスを参照するハンドラを取得するマクロ
#define XANDLER_INTERNAL(FUNCTION) (XANDLER_FUNCTION(FUNCTION)), (this)
表 25.40. マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの取得に用いるクラス関数名を表します。 |
|
XANDLER_INTERNAL マクロの利用シーン |
同じクラスのインスタンスを参照するハンドラを個別に登録するときに使います。
|
SFCError error;
error = RegisterHandler(SFXEventRange(SFEVT_KEY, SFEVT_KEY, SFP16_BEGIN, SFP16_END), XANDLER_INTERNAL(OnKey));
例 25.36. 外部のインスタンスを参照するハンドラを取得するマクロ
#define XANDLER_EXTERNAL(FUNCTION, REFERENCE) (XANDLER_FUNCTION(FUNCTION)), ((REFERENCE))
表 25.41. マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの取得に用いるクラス関数名を表します。 |
2 |
インスタンス変数名 |
外部のインスタンスを保持する変数名を表します。 |
|
XANDLER_INTERNALマクロと XANDLER_EXTERNALマクロ |
ハンドラが同じクラスのインスタンスを参照する場合は、XANDLER_INTERNALマクロを使用してハンドラを取得します。
このとき、ハンドラは自動的に this 変数を含む構文に展開されます。
ハンドラが外部のクラスのインスタンスを参照する場合は、XANDLER_EXTERNALマクロを使用してハンドラを取得します。
このとき、ハンドラは自動的に引数で指定した外部クラスのインスタンスを含む構文に展開されます。
同じクラスのインスタンスを参照するハンドラが大半なので大抵の場合は XANDLER_INTERNALマクロを利用します。
static 関数の中など this が使えない場所や、
this が使える場合でも渡したいインスタンスが自分自身ではなく外部のレスポンダの場合、
XANDLER_EXTERNAL マクロを利用することになります。
|