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

5.4. SFC アプリの開発

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

[Note] SFR / SFY アプリの場合

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

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

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

例 5.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 HandleEvent(SFXEventConstRef event);
    virtual Bool HandleRender(SFXEventConstRef event);
    Bool OnKey(UInt16 key);
};

#endif // __HELLOWORLD_HPP //

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

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

HandleRender 関数は SFC アプリの描画イベント ハンドラです。 HandleRender 関数は、描画イベント時の描画処理を行います。

描画処理はここで行う必要があります。

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

// イベント ハンドラ
Bool HelloWorld::HandleEvent(SFXEventConstRef event)
{
    // ここに各種イベントの分岐を記述します。

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

例 5.4. SophiaFramework AppWizard が自動生成する描画ハンドラ HandleRender 関数

// 描画ハンドラ
Bool HelloWorld::HandleRender(SFXEventConstRef event)
{
    // ここに描画時の処理を記述します。

    SFXGraphicsPtr graphics;

    if (IsRenderable()) {
        // SFXGraphics インスタンスの取得をします。
        graphics = SFXGraphics::GetInstance();
        if (graphics != null) {
            // 画面を白色で塗りつぶします。
            // SFXGraphics::GetDeviceRectangle() で画面全体 ( 長方形 ) を取得します。
            // SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00) は白色を表します( 左から R、G、B、アルファ値 )。
            graphics->ClearRectangle(graphics->GetDeviceRectangle(), SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00));
            // 画面に "Hello World" 文字列を描画します。
            graphics->DrawSingleText("Hello World", graphics->GetDeviceRectangle(), SFXRGBColor(0x00, 0x00, 0x00, 0x00));
            // GUI フレームワークを使わないアプリでは必ず画面を更新します。
            graphics->Update();
            return true;
        }
    }
    return false;
}

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

Bool HelloWorld::OnKey(UInt16 key)
{
    // ここにキーが押されたときの処理を記述します。

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

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

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

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