前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1

4.4. SFC アプリの開発

GUI フレームワークを使わない SFC アプリでは、アプリ クラスは SFCApplication を継承します。

[Note] SFR アプリの場合

GUI フレームワークを使う SFR アプリでは SFRApplication を継承します。

SFC アプリでは、ハンドラ関数の宣言に HANDLER_DECLARE を使いません。 例えば、キー ハンドラ OnKey 関数は、通常の関数と同じように宣言します。

例 4.2. HelloWorld アプリ クラスの定義

//
//  HelloWorld.hpp
//

#ifndef __HELLOWORLD_HPP
#define __HELLOWORLD_HPP

#include <SophiaFramework.hpp>
#include "HelloWorld.bid"

//
//  HelloWorld アプリ クラス
//

SFMTYPEDEFCLASS(HelloWorld)
class HelloWorld : public SFCApplication {
    SFMSEALCOPY(HelloWorld)
public:
    static SFCInvokerPtr Factory(Void);
private:
    HelloWorld(Void);
    virtual ~HelloWorld(Void);
    virtual Bool Invoke(SFXEventConstRef event);
    Bool OnKey(UInt16 key);
};

#endif // __HELLOWORLD_HPP //

Invoke 関数は SFC アプリのイベント ハンドラです。 Invoke 関数は、受信したイベントに対応するハンドラ関数を呼び出します。

イベントは Invoke 関数の引数として渡され、イベントの type に応じて、ハンドラ関数が呼び出されます。 キー イベントの場合、キー ハンドラ OnKey 関数が呼び出されます。

例 4.3. SophiaFramework AppWizard が自動生成するイベント ハンドラ Invoke 関数

Bool HelloWorld::Invoke(SFXEventConstRef event)
{
    Bool result(false);

    switch (event.GetType()) {
        case SFEVT_KEY: // キー イベントのとき
            result = OnKey(event.GetP16());
            break;
    }
    if (!result) {
        result = SFCApplication::Invoke(event);
    }
    return result;
}

例 4.4. SophiaFramework AppWizard が自動生成するキー ハンドラ OnKey 関数

Bool HelloWorld::OnKey(UInt16 key)
{
    // キーイベントの処理
    switch (key) {
        case AVK_SELECT: // セレクトキーが押されたとき
            Terminate(); // アプリを終了する
            return true;
    }
    return false;
}

SFC アプリではイベント ハンドラを独自に実装するので、コンストラクタではハンドラ関数を登録しません。

例 4.5. コンストラクタの定義

HelloWorld::HelloWorld(Void) static_throws
{
    return;
}