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

9.6. アプリケーションクラス(応用編)

基礎的な HelloWorld アプレットの開発方法やサスペンド / レジュームへの対応方法などについて解説します。

9.6.1. アプリケーションウィザードで生成するコード(最大セット)

図 9.25. 動作例

動作例

アプリケーションウィザードを利用して作成した最大のアプリケーションクラスのコードです。

例 9.33. 宣言

//
//      USRApplication.hpp
//
//      This source code was automatically
//      generated by SophiaFramework 5.0.
//

#ifndef __USRAPPLICATION_HPP
#define __USRAPPLICATION_HPP

#define TARGET_BUILD_DEBUG
#include <SophiaFramework.hpp>
#include "USRApplication.bid"

SFMTYPEDEFCLASS(USRApplication)
class USRApplication : public SFYApplication {
    SFMSEALCOPY(USRApplication)
public:
    static SFCInvokerPtr Factory(Void);
private:
    explicit USRApplication(Void) static_throws;
    virtual ~USRApplication(Void);
    XANDLER_DECLARE_VOIDRENDER(OnRenderRequest)
    XANDLER_DECLARE_VOIDSTART(OnAppStart)
    XANDLER_DECLARE_VOIDSTOP(OnAppStop)
    XANDLER_DECLARE_VOIDRESUME(OnAppResume)
    XANDLER_DECLARE_VOIDSUSPEND(OnAppSuspend)
    XANDLER_DECLARE_BOOLVOID(OnAppNoClose)
    XANDLER_DECLARE_BOOLVOID(OnAppNoSleep)
    XANDLER_DECLARE_BOOLEVENT(OnKey)
    XANDLER_DECLARE_BOOLEVENT(OnKeyPress)
    XANDLER_DECLARE_BOOLEVENT(OnKeyRelease)
};

#endif // __USRAPPLICATION_HPP //

例 9.34. 実装

//
//      USRApplication.cpp
//
//      This source code was automatically
//      generated by SophiaFramework 5.0.
//

#include "USRApplication.hpp"


// ブートローダ
SFCApplet::FactorySPP SFCApplet::Boot(AEECLSID id, SFXAnsiStringPtr license)
{
    // ここにライセンスコードを記述する

    *license = "heap://";

    return (id == AEECLSID_USRAPPLICATION) ? (&USRApplication::Factory) : (null);
}


// ファクトリ関数 : ユーザー定義アプリケーションクラスのインスタンスを生成する関数
SFCInvokerPtr USRApplication::Factory(Void)
{
    return ::new USRApplication;
}


// コンストラクタ
USRApplication::USRApplication(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_APP_START, SFEVT_APP_START, SFP16_BEGIN, SFP16_END),
            XANDLER_INTERNAL(OnAppStart)
        ));
    }
    if (static_try()) {

        // アプレット終了ハンドラの登録
        static_throw(RegisterHandler(
            SFXEventRange(SFEVT_APP_STOP, SFEVT_APP_STOP, SFP16_BEGIN, SFP16_END),
            XANDLER_INTERNAL(OnAppStop)
        ));
    }
    if (static_try()) {

        // アプレット再開ハンドラの登録
        static_throw(RegisterHandler(
            SFXEventRange(SFEVT_APP_RESUME, SFEVT_APP_RESUME, SFP16_BEGIN, SFP16_END),
            XANDLER_INTERNAL(OnAppResume)
        ));
    }
    if (static_try()) {

        // アプレット中断ハンドラの登録
        static_throw(RegisterHandler(
            SFXEventRange(SFEVT_APP_SUSPEND, SFEVT_APP_SUSPEND, SFP16_BEGIN, SFP16_END),
            XANDLER_INTERNAL(OnAppSuspend)
        ));
    }
    if (static_try()) {

        // アプレット終了確認ハンドラの登録
        static_throw(RegisterHandler(
            SFXEventRange(SFEVT_APP_NO_CLOSE, SFEVT_APP_NO_CLOSE, SFP16_BEGIN, SFP16_END),
            XANDLER_INTERNAL(OnAppNoClose)
        ));
    }
    if (static_try()) {

        // アプレットスリープ確認ハンドラの登録
        static_throw(RegisterHandler(
            SFXEventRange(SFEVT_APP_NO_SLEEP, SFEVT_APP_NO_SLEEP, SFP16_BEGIN, SFP16_END),
            XANDLER_INTERNAL(OnAppNoSleep)
        ));
    }
    if (static_try()) {

        // キーハンドラの登録
        static_throw(RegisterHandler(
            SFXEventRange(SFEVT_KEY, SFEVT_KEY, SFP16_BEGIN, SFP16_END),
            XANDLER_INTERNAL(OnKey)
        ));
    }
    if (static_try()) {

        // キー押下ハンドラの登録
        static_throw(RegisterHandler(
            SFXEventRange(SFEVT_KEY_PRESS, SFEVT_KEY_PRESS, SFP16_BEGIN, SFP16_END),
            XANDLER_INTERNAL(OnKeyPress)
        ));
    }
    if (static_try()) {

        // キー解放ハンドラの登録
        static_throw(RegisterHandler(
            SFXEventRange(SFEVT_KEY_RELEASE, SFEVT_KEY_RELEASE, SFP16_BEGIN, SFP16_END),
            XANDLER_INTERNAL(OnKeyRelease)
        ));
    }
}


// デストラクタ
USRApplication::~USRApplication(Void)
{
}


// 描画ハンドラ
XANDLER_IMPLEMENT_VOIDRENDER(USRApplication, OnRenderRequest, invoker, reason, graphics)
{
    // 未使用変数のワーニングを回避する

    unused(invoker);
    unused(reason);

    // ここに描画時の処理を記述する

    // 画面に描画を行う

    graphics->DrawSingleText("Hello World", GetLocalBound(), SFXRGBColor(0x00, 0x00, 0x00, 0x00));
    return;
}


// アプレット開始ハンドラ
XANDLER_IMPLEMENT_VOIDSTART(USRApplication, OnAppStart, invoker, environment)
{
    // 未使用変数のワーニングを回避する

    unused(invoker);
    unused(environment);

    // ここにアプレット開始時の処理を記述する

    return;
}


// アプレット終了ハンドラ
XANDLER_IMPLEMENT_VOIDSTOP(USRApplication, OnAppStop, invoker, quitable)
{
    // 未使用変数のワーニングを回避する

    unused(invoker);
    unused(quitable);

    // ここにアプレット終了時の処理を記述する

    return;
}


// アプレット再開ハンドラ
XANDLER_IMPLEMENT_VOIDRESUME(USRApplication, OnAppResume, invoker, environment)
{
    // 未使用変数のワーニングを回避する

    unused(invoker);
    unused(environment);

    // ここにアプレット再開時の処理を記述する

    return;
}


// アプレット中断ハンドラ
XANDLER_IMPLEMENT_VOIDSUSPEND(USRApplication, OnAppSuspend, invoker, reason, info)
{
    // 未使用変数のワーニングを回避する

    unused(invoker);
    unused(reason);
    unused(info);

    // ここにアプレット中断時の処理を記述する

    return;
}


// アプレット終了確認ハンドラ
XANDLER_IMPLEMENT_BOOLVOID(USRApplication, OnAppNoClose, invoker)
{
    // 未使用変数のワーニングを回避する

    unused(invoker);

    // アプレットの終了を拒否する場合は true を返す

    return false;
}


// アプレットスリープ確認ハンドラ
XANDLER_IMPLEMENT_BOOLVOID(USRApplication, OnAppNoSleep, invoker)
{
    // 未使用変数のワーニングを回避する

    unused(invoker);

    // アプレットのスリープを拒否する場合は true を返す

    return false;
}


// キーハンドラ
XANDLER_IMPLEMENT_BOOLEVENT(USRApplication, OnKey, invoker, event)
{
    // 未使用変数のワーニングを回避する

    unused(invoker);

    // ここにキーが押されたときの処理を記述する

    // セレクトキーが押されたらアプレットを終了する

    switch (event.GetP16()) {
        case AVK_SELECT:
            Terminate();
            return true;
    }
    return false;
}


// キー押下ハンドラ
XANDLER_IMPLEMENT_BOOLEVENT(USRApplication, OnKeyPress, invoker, event)
{
    // 未使用変数のワーニングを回避する

    unused(invoker);
    unused(event);

    // ここにキーが押下状態になったときの処理を記述する

    return false;
}


// キー解放ハンドラ
XANDLER_IMPLEMENT_BOOLEVENT(USRApplication, OnKeyRelease, invoker, event)
{
    // 未使用変数のワーニングを回避する

    unused(invoker);
    unused(event);

    // ここにキーが解放状態になったときの処理を記述する

    return false;
}

9.6.2. アプリケーションウィザードで生成するコード(最小セット)

図 9.26. 動作例

動作例

アプリケーションウィザードを利用して作成した最小のアプリケーションクラスのコードです。

例 9.35. 宣言

//
//      USRApplication.hpp
//
//      This source code was automatically
//      generated by SophiaFramework 5.0.
//

#ifndef __USRAPPLICATION_HPP
#define __USRAPPLICATION_HPP

#define TARGET_BUILD_DEBUG
#include <SophiaFramework.hpp>
#include "USRApplication.bid"

SFMTYPEDEFCLASS(USRApplication)
class USRApplication : public SFYApplication {
    SFMSEALCOPY(USRApplication)
public:
    static SFCInvokerPtr Factory(Void);
private:
    explicit USRApplication(Void) static_throws;
    virtual ~USRApplication(Void);
};

#endif // __USRAPPLICATION_HPP //

例 9.36. 実装

//
//      USRApplication.cpp
//
//      This source code was automatically
//      generated by SophiaFramework 5.0.
//

#include "USRApplication.hpp"


// ブートローダ
SFCApplet::FactorySPP SFCApplet::Boot(AEECLSID id, SFXAnsiStringPtr license)
{
    // ここにライセンスコードを記述する

    *license = "heap://";

    return (id == AEECLSID_USRAPPLICATION) ? (&USRApplication::Factory) : (null);
}


// ファクトリ関数 : ユーザー定義アプリケーションクラスのインスタンスを生成する関数
SFCInvokerPtr USRApplication::Factory(Void)
{
    return ::new USRApplication;
}


// コンストラクタ
USRApplication::USRApplication(Void) static_throws
{
    // ここに各種ハンドラの登録を記述する

}


// デストラクタ
USRApplication::~USRApplication(Void)
{
}