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

20.7. イベントクラス

20.7.1. SFXEvent クラス

SFXEvent クラスは、 イベントタイプ( BREW API AEEEvent 型)、 P16 パラメータ値(UInt16 型)、 P32 パラメータ値(UInt32 型)の 3 つから構成されるイベント情報をカプセル化して管理するためのクラスです。

イベントタイプは、 BREW API AEEEvent イベントに対応します。 P16 パラメータと P32 パラメータは、 BREW のイベントハンドラに渡す、wParam パラメータと dwParam パラメータに対応し、 イベントタイプに付随する情報を格納しているパラメータであり、 その意味はイベントタイプ毎に異なります。

[Note] イベントタイプのリスト

イベントタイプのリストについては、SFCEventEnum を参照してください。

例 20.28. SFXEvent クラスの使用方法 1

// イベントハンドラ
Bool helloworld::HandleEvent(SFXEventConstRef event)
{
    // ここに BREW 環境から配信される各種イベントの分岐処理を記述する

    Bool result(false);

    // イベントタイプを判定する
    switch (event.GetType()) {

        case SFEVT_KEY: // キーイベントのとき

            // キーハンドラ OnKey 関数を呼び出す
            result = OnKey(event.GetP16()); // OnKey 関数はキーイベントを処理した場合は true、しなかった場合は false を返す
    }

    return result; // イベントを処理したときは true を返し, そうでないときは false を返す
}

例 20.29. SFXEvent クラスの使用方法 2

SFXEvent event;

// ユーザーイベントを設定する場合
event.Set(SFEVT_USER + 0x01, 0, 0);

SFBShellSmp shell = SFBShell::GetInstance();

// 自分自身にユーザーイベントを送信する
shell->PostEvent(GetClassID(), event);

20.7.2. SFXEventRange クラス

SFXEventRange クラスは、 SFY GUI フレームワークで使用するイベントハンドラやトレーサの登録に必要となるイベントの範囲を表すクラスです。

開始イベントと終了イベントの、 イベントタイプ( BREW API AEEEvent 型)と P16 パラメータ値(UInt16 型)を指定してイベントの範囲を指定します。

例えば、 SFXEventRange(sEventType,eEventType, sP16, eP16) は、 (sEventType, sP16, *) イベントから (eEventType, eP16, *) イベントまでの範囲にあるイベントを表します。

例 20.30. SFXEventRange クラスの使用方法 1(イベントハンドラの登録)

// コンストラクタ
HelloWorld::HelloWorld(Void) static_throws
{
    if (static_try()) {
        static_throw(RegisterHandler(
            SFXEventRange(SFEVT_RESPONDER_RENDER, SFEVT_RESPONDER_RENDER,
            SFP16_RENDER_REQUEST, SFP16_RENDER_REQUEST),
            XANDLER_INTERNAL(OnRenderRequest)
        ));
    }
    if (static_try()) {
        static_throw(RegisterHandler(
            SFXEventRange(SFEVT_KEY, SFEVT_KEY, SFP16_BEGIN, SFP16_END),
            XANDLER_INTERNAL(OnKey)
        ));
    }
}

例 20.31. SFXEventRange クラスの使用方法 2(イベントハンドラの登録)

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));

例 20.32. SFXEventRange クラスの使用方法 3(トレーサの登録)

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}
};
SFCError error;

error = RegisterTracer(atomic_cast(range), rule, lengthof(range));