前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3

9.26. ハンドラ一覧

レスポンダがイベントを受信して処理するには、以下のハンドラマクロを利用してハンドラを作成する必要があります。

ハンドラには、用途の観点から 2 種類のハンドラがあります。

  1. 汎用ハンドラ
  2. 特定のイベントに特化された専用ハンドラ

それぞれのハンドラには、ハンドラを作成するためのハンドラマクロが用意されています。

また、戻り値の観点から 2 種類のハンドラがあります。

  1. VOID 型ハンドラ: 戻り値を省略できます。 戻り値は true であると判断されます。
  2. 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.2. 引数のある汎用ハンドラ[XANDLER_DECLARE_VOIDEVENT または XANDLER_DECLARE_BOOLEVENT]

例 9.211. ハンドラ宣言

XANDLER_DECLARE_VOIDEVENT(FUNCTION)

// または

XANDLER_DECLARE_BOOLEVENT(FUNCTION)

表 9.83. 宣言マクロ引数

番号 内容 解説
1 関数名 ハンドラの関数名を表します。

例 9.212. ハンドラ実装

XANDLER_IMPLEMENT_VOIDEVENT(CLASS, FUNCTION, invoker, event)
{
    return;
}

// または

XANDLER_IMPLEMENT_BOOLEVENT(CLASS, FUNCTION, invoker, event)
{
    return false;
}

表 9.84. 実装マクロ引数

番号 内容 解説
1 クラス名 ハンドラが所属するクラス名を表します。
2 関数名 ハンドラの関数名を表します。
3 SFYResponderPtr 型変数名 ハンドラの呼び出し元レスポンダを表します。
4 SFXEventConstRef 型変数名 イベントを表します。

参照: キーイベント[SFEVT_KEY から SFEVT_KEY_HOOK_RELEASE] | コントロールイベント[SFEVT_COMMAND から SFEVT_CTL_TEXT_MODECHANGED] | ダイアログイベント[SFEVT_DIALOG_INIT から SFEVT_COPYRIGHT_END] | シェルイベント[SFEVT_ALARM から SFEVT_NOTIFY_FAILURE] | デバイスイベント[SFEVT_FLIP から SFEVT_SCR_ROTATE] | クリップボードイベント[SFEVT_CB_CUT から SFEVT_CB_PASTE] | その他のアプリイベント[SFEVT_APP_CONFIG から SFEVT_APP_START_WINDOW] | ソフトキーイベント[SFEVT_RESPONDER_SOFTKEY]

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. その他のマクロ

9.26.18.1. XANDLER_FUNCTION マクロ

XANDLER_FUNCTION は、ハンドラのエントリ名を取得するマクロです。

例 9.243. XANDLER_FUNCTION マクロの定義

#define    XANDLER_FUNCTION(FUNCTION)    FUNCTION##SHP

表 9.115. マクロ引数

番号 内容 解説
1 関数名 エントリ名の取得に用いる関数名を表します。
[Tip] 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 インスタンス変数名 外部のインスタンスを保持する変数名を表します。
[Note] 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);