レスポンダがイベントを受信して処理するには、以下のハンドラマクロを利用してハンドラを作成する必要があります。
ハンドラには、用途の観点から 2 種類のハンドラがあります。
-
汎用ハンドラ
-
特定のイベントに特化された専用ハンドラ
それぞれのハンドラには、ハンドラを作成するためのハンドラマクロが用意されています。
また、戻り値の観点から 2 種類のハンドラがあります。
-
VOID 型ハンドラ: 戻り値を省略できます。 戻り値は true であると判断されます。
-
BOOL 型ハンドラ: true か false の戻り値を明記します。
参照:
ハンドラ |
SFXEvent |
SFXEventRange |
SFCEventEnum
9.26.1. 引数のない汎用ハンドラ[XANDLER_DECLARE_VOIDVOID または XANDLER_DECLARE_BOOLVOID]
例 9.209. ハンドラ宣言
XANDLER_DECLARE_VOIDVOID(FUNCTION)
XANDLER_DECLARE_BOOLVOID(FUNCTION)
表 9.81. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの関数名を表します。 |
例 9.210. ハンドラ実装
XANDLER_IMPLEMENT_VOIDVOID(CLASS, FUNCTION, invoker)
{
return;
}
XANDLER_IMPLEMENT_BOOLVOID(CLASS, FUNCTION, invoker)
{
return false;
}
表 9.82. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラの関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
9.26.3. アプリ開始イベント専用ハンドラ[XANDLER_DECLARE_VOIDSTART または XANDLER_DECLARE_BOOLSTART]
例 9.213. ハンドラ宣言
XANDLER_DECLARE_VOIDSTART(FUNCTION)
XANDLER_DECLARE_BOOLSTART(FUNCTION)
表 9.85. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの関数名を表します。 |
例 9.214. ハンドラ実装
XANDLER_IMPLEMENT_VOIDSTART(CLASS, FUNCTION, invoker, environment)
{
return;
}
XANDLER_IMPLEMENT_BOOLSTART(CLASS, FUNCTION, invoker, environment)
{
return false;
}
表 9.86. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラの関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
AEEAppStart* 型変数名 |
開始情報を表します。 |
参照:
アプリ開始イベント[SFEVT_APP_START] |
AEEAppStart |
BREW API
AEEEvent
9.26.4. アプリ終了イベント専用ハンドラ[XANDLER_DECLARE_VOIDSTOP または XANDLER_DECLARE_BOOLSTOP]
例 9.215. ハンドラ宣言
XANDLER_DECLARE_VOIDSTOP(FUNCTION)
XANDLER_DECLARE_BOOLSTOP(FUNCTION)
表 9.87. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの関数名を表します。 |
例 9.216. ハンドラ実装
XANDLER_IMPLEMENT_VOIDSTOP(CLASS, FUNCTION, invoker, quitable)
{
return;
}
XANDLER_IMPLEMENT_BOOLSTOP(CLASS, FUNCTION, invoker, quitable)
{
return false;
}
表 9.88. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラの関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
BoolPtr 型変数名 |
終了確認を表します。 |
参照:
アプリ終了イベント[SFEVT_APP_STOP]
9.26.5. アプリ再開イベント専用ハンドラ[XANDLER_DECLARE_VOIDRESUME または XANDLER_DECLARE_BOOLRESUME]
例 9.217. ハンドラ宣言
XANDLER_DECLARE_VOIDRESUME(FUNCTION)
XANDLER_DECLARE_BOOLRESUME(FUNCTION)
表 9.89. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの関数名を表します。 |
例 9.218. ハンドラ実装
XANDLER_IMPLEMENT_VOIDRESUME(CLASS, FUNCTION, invoker, environment)
{
return;
}
XANDLER_IMPLEMENT_BOOLRESUME(CLASS, FUNCTION, invoker, environment)
{
return false;
}
表 9.90. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラの関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
AEEAppStart* 型変数名 |
再開情報を表します。 |
参照:
アプリ再開イベント[SFEVT_APP_RESUME] |
AEEAppStart |
BREW API
AEEEvent
9.26.6. アプリ中断イベント専用ハンドラ[XANDLER_DECLARE_VOIDSUSPEND または XANDLER_DECLARE_BOOLSUSPEND]
例 9.219. ハンドラ宣言
XANDLER_DECLARE_VOIDSUSPEND(FUNCTION)
XANDLER_DECLARE_BOOLSUSPEND(FUNCTION)
表 9.91. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの関数名を表します。 |
例 9.220. ハンドラ実装
XANDLER_IMPLEMENT_VOIDSUSPEND(CLASS, FUNCTION, invoker, reason, info)
{
return;
}
XANDLER_IMPLEMENT_BOOLSUSPEND(CLASS, FUNCTION, invoker, reason, info)
{
return false;
}
表 9.92. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラの関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
AEESuspendReason 型変数名 |
中断原因を表します。 |
5 |
AEESuspendInfo* 型変数名 |
中断情報を表します。 |
参照:
アプリ中断イベント[SFEVT_APP_SUSPEND]
9.26.7. 親子イベント専用ハンドラ[XANDLER_DECLARE_VOIDOWNER]
例 9.221. ハンドラ宣言
XANDLER_DECLARE_VOIDOWNER(FUNCTION)
表 9.93. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの関数名を表します。 |
例 9.222. ハンドラ実装
XANDLER_IMPLEMENT_VOIDOWNER(CLASS, FUNCTION, invoker, reason, responder)
{
return;
}
表 9.94. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラの関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
SFYResponderPtr 型変数名 |
通知するレスポンダを表します。 |
参照:
親子イベント[SFEVT_RESPONDER_OWNER]
9.26.8. フレームイベント専用ハンドラ[XANDLER_DECLARE_VOIDFRAME]
例 9.223. ハンドラ宣言
XANDLER_DECLARE_VOIDFRAME(FUNCTION)
表 9.95. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの関数名を表します。 |
例 9.224. ハンドラ実装
XANDLER_IMPLEMENT_VOIDFRAME(CLASS, FUNCTION, invoker, reason, responder)
{
return;
}
表 9.96. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラの関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
SFYResponderPtr 型変数名 |
通知するレスポンダを表します。 |
参照:
フレームイベント[SFEVT_RESPONDER_FRAME]
9.26.9. 領域イベント専用ハンドラ[XANDLER_DECLARE_VOIDBOUND]
例 9.225. ハンドラ宣言
XANDLER_DECLARE_VOIDBOUND(FUNCTION)
表 9.97. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの関数名を表します。 |
例 9.226. ハンドラ実装
XANDLER_IMPLEMENT_VOIDBOUND(CLASS, FUNCTION, invoker, reason, rectangle)
{
return;
}
表 9.98. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラの関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
SFXRectanglePtr 型変数名 |
通知する矩形を表します。 |
参照:
領域イベント[SFEVT_RESPONDER_BOUND]
9.26.10. 余白イベント専用ハンドラ[XANDLER_DECLARE_VOIDMARGIN]
例 9.227. ハンドラ宣言
XANDLER_DECLARE_VOIDMARGIN(FUNCTION)
表 9.99. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの関数名を表します。 |
例 9.228. ハンドラ実装
XANDLER_IMPLEMENT_VOIDMARGIN(CLASS, FUNCTION, invoker, reason, margin)
{
return;
}
表 9.100. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラの関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
SFXMarginPtr 型変数名 |
通知する余白を表します。 |
参照:
余白イベント[SFEVT_RESPONDER_MARGIN]
9.26.11. 状態イベント専用ハンドラ[XANDLER_DECLARE_VOIDSTATE]
例 9.229. ハンドラ宣言
XANDLER_DECLARE_VOIDSTATE(FUNCTION)
表 9.101. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの関数名を表します。 |
例 9.230. ハンドラ実装
XANDLER_IMPLEMENT_VOIDSTATE(CLASS, FUNCTION, invoker, reason, state)
{
return;
}
表 9.102. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラの関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
Bool 型変数名 |
通知する状態を表します。 |
参照:
状態イベント[SFEVT_RESPONDER_STATE]
9.26.12. フォーカスイベント専用ハンドラ[XANDLER_DECLARE_VOIDFOCUS]
例 9.231. ハンドラ宣言
XANDLER_DECLARE_VOIDFOCUS(FUNCTION)
表 9.103. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの関数名を表します。 |
例 9.232. ハンドラ実装
XANDLER_IMPLEMENT_VOIDFOCUS(CLASS, FUNCTION, invoker, reason, focus)
{
return;
}
表 9.104. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラの関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
Bool 型変数名 |
フォーカスの状態を表します。 |
参照:
フォーカスイベント[SFEVT_RESPONDER_FOCUS]
9.26.13. 描画イベント専用ハンドラ[XANDLER_DECLARE_VOIDRENDER]
例 9.233. ハンドラ宣言
XANDLER_DECLARE_VOIDRENDER(FUNCTION)
表 9.105. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの関数名を表します。 |
例 9.234. ハンドラ実装
XANDLER_IMPLEMENT_VOIDRENDER(CLASS, FUNCTION, invoker, reason, graphics)
{
return;
}
表 9.106. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラの関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
SFXGraphicsPtr 型変数名 |
グラフィックスオブジェクトを表します。 |
参照:
描画イベント[SFEVT_RESPONDER_RENDER]
9.26.14. スタイルイベント専用ハンドラ[XANDLER_DECLARE_VOIDSTYLE]
例 9.235. ハンドラ宣言
XANDLER_DECLARE_VOIDSTYLE(FUNCTION)
表 9.107. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの関数名を表します。 |
例 9.236. ハンドラ実装
XANDLER_IMPLEMENT_VOIDSTYLE(CLASS, FUNCTION, invoker, reason)
{
return;
}
表 9.108. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラの関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
参照:
スタイルイベント[SFEVT_RESPONDER_STYLE]
9.26.15. 値イベント専用ハンドラ[XANDLER_DECLARE_VOIDVALUE]
例 9.237. ハンドラ宣言
XANDLER_DECLARE_VOIDVALUE(FUNCTION)
表 9.109. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの関数名を表します。 |
例 9.238. ハンドラ実装
XANDLER_IMPLEMENT_VOIDVALUE(CLASS, FUNCTION, invoker, reason, value)
{
return;
}
表 9.110. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラの関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
SInt32 型変数名 |
通知する値を表します。 |
参照:
値イベント[SFEVT_RESPONDER_VALUE]
9.26.16. 結果イベント専用ハンドラ[XANDLER_DECLARE_VOIDRESULT]
例 9.239. ハンドラ宣言
XANDLER_DECLARE_VOIDRESULT(FUNCTION)
表 9.111. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの関数名を表します。 |
例 9.240. ハンドラ実装
XANDLER_IMPLEMENT_VOIDRESULT(CLASS, FUNCTION, invoker, reason, result)
{
return;
}
表 9.112. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラの関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
5 |
SInt32 型変数名 |
通知する結果を表します。 |
参照:
結果イベント[SFEVT_RESPONDER_RESULT]
9.26.17. スクロールバーイベント専用ハンドラ[XANDLER_DECLARE_VOIDSCROLLBAR]
例 9.241. ハンドラ宣言
XANDLER_DECLARE_VOIDSCROLLBAR(FUNCTION)
表 9.113. 宣言マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの関数名を表します。 |
例 9.242. ハンドラ実装
XANDLER_IMPLEMENT_VOIDSCROLLBAR(CLASS, FUNCTION, invoker, reason)
{
return;
}
表 9.114. 実装マクロ引数
番号 |
内容 |
解説 |
1 |
クラス名 |
ハンドラが所属するクラス名を表します。 |
2 |
関数名 |
ハンドラの関数名を表します。 |
3 |
SFYResponderPtr 型変数名 |
ハンドラの呼び出し元レスポンダを表します。 |
4 |
UInt16 型変数名 |
イベントの P16 パラメータを表します。 |
参照:
スクロールバーイベント[SFEVT_RESPONDER_SCROLLBAR]
9.26.18.1. XANDLER_FUNCTION マクロ
XANDLER_FUNCTION は、ハンドラのエントリ名を取得するマクロです。
例 9.243. XANDLER_FUNCTION マクロの定義
#define XANDLER_FUNCTION(FUNCTION) FUNCTION##SHP
表 9.115. マクロ引数
番号 |
内容 |
解説 |
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));
9.26.18.2. XANDLER_INTERNAL マクロ
XANDLER_INTERNAL は、内部のインスタンス("this"インスタンス)を参照するハンドラを取得するマクロです。
このマクロは、ハンドラへのポインタと内部インスタンス("this"インスタンス)への参照を渡してハンドラを登録するときに使います。
例 9.244. XANDLER_INTERNAL マクロの定義
#define XANDLER_INTERNAL(FUNCTION) (XANDLER_FUNCTION(FUNCTION)), (this)
表 9.116. マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの取得に用いる関数名を表します。 |
SFCError error;
error = RegisterHandler(SFXEventRange(SFEVT_KEY, SFEVT_KEY, SFP16_BEGIN, SFP16_END), XANDLER_INTERNAL(OnKey));
9.26.18.3. XANDLER_EXTERNAL マクロ
XANDLER_EXTERNAL は、外部のインスタンス(this インスタンス以外のインスタンス)を参照するハンドラを取得するマクロです。
このマクロは、ハンドラへのポインタと外部インスタンスへの参照を渡してハンドラを登録するときに使います。
例 9.245. XANDLER_EXTERNAL マクロの定義
#define XANDLER_EXTERNAL(FUNCTION, REFERENCE) (XANDLER_FUNCTION(FUNCTION)), ((REFERENCE))
表 9.117. マクロ引数
番号 |
内容 |
解説 |
1 |
関数名 |
ハンドラの取得に用いる関数名を表します。 |
2 |
インスタンス変数名 |
外部のインスタンスを保持する変数名を表します。 |
|
XANDLER_INTERNAL マクロと XANDLER_EXTERNAL マクロ |
同じクラスのインスタンス(this インスタンス)をハンドラが参照する場合は、
XANDLER_INTERNALマクロを使用してハンドラを取得します。
このとき、ハンドラは自動的に this 変数を含む構文に展開されます。
外部クラスのインスタンス(this インスタンス以外のインスタンス)をハンドラが参照する場合は、
XANDLER_EXTERNALマクロを使用してハンドラを取得します。
このとき、ハンドラは自動的に引数で指定した外部クラスのインスタンスを含む構文に展開されます。
this インスタンスを参照するハンドラが大半なので、
大抵の場合は XANDLER_INTERNALマクロを利用します。
static 関数の中など this が使えない場合や、
ハンドラが外部のレスポンダなど this インスタンス以外のインスタンスを参照する場合は、
XANDLER_EXTERNAL マクロを利用します。
|
9.26.18.4. XANDLER_NULL マクロ
XANDLER_NULL は、ヌルハンドラを取得するマクロです。
ヌルハンドラを登録した場合、
実際にはヌルハンドラは呼び出されませんが、ハンドラは処理されたとみなされます。
例 9.246. XANDLER_NULL マクロの定義
#define XANDLER_NULL (null), (null)
たとえば、キーイベントをすべて処理して無効にするには、以下のように記述します。
SFCError error;
error = RegisterHandler(SFXEventRange(SFEVT_KEY, SFEVT_KEY, SFP16_BEGIN, SFP16_END), XANDLER_NULL);