前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク : SophiaFramework 3.0

5.2. AppWizard のソースコード(GUI フレームワークを使わない場合)

SophiaFramework AppWizard が生成したコードを元に、アプリの起動から終了までを解説します。

5.2.1. 起動コード

SophiaFramework のアプリは SFCApplet::Boot() 関数と、Factory() 関数を実装する必要があります。

//
//      HelloWorld.cpp
//

#include "HelloWorld.hpp"

// ブート ローダ
SFCApplet::FactorySPP SFCApplet::Boot(AEECLSID id, SFXAnsiStringPtr license)
{
    *license = "heap://"
      "TIXDRQXNU5WHU8Y3Z9WOHWQR6Z3VPSDHDV5CR1S4XASPWLUHWAS7Z5Z2TGS3XMSAT3UPUQTLTARCYPSF"
      "UEJZ6ROSJWGUQSEYKR6V2U4VESMTQLHKZ6X7Y2VKXHWIX3XBU0Z7VHWHXIZBSGT5SPU3XLX0Z1Y4R3TC"
      "U6WGT9WHWIVNYHYCUCR9T3SMTEWPRNVAX1Y4VPW2YCY9YQV5R7Z9UIVHT6SDUPU2SIW6VCRCWBR2S4WQ"
      "UPYFWCYGT4VIT1WHXGYPTQSFYPWNV3ULRNWFW7RBRFVKUKS2YQSQYHW1TPUPXBZ6UEY2WOYKR7S3TAU4"
      "TQS6UHVFVEVLU3R5SDSKW7RPTNTPVQU2T4R8Z4VLUGEW3U98TLDR8/";

    return (id == AEECLSID_HELLOWORLD) ? (&HelloWorld::Factory) : (null);
}

// ファクトリ関数
SFCInvokerPtr HelloWorld::Factory(Void)
{
    return ::new HelloWorld;
}

5.2.2. アプリクラス(HelloWorld クラス)

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

//
//      HelloWorld.hpp
//

#ifndef __HELLOWORLD_HPP
#define __HELLOWORLD_HPP

#define TARGET_BUILD_DEBUG
#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 //

5.2.3. イベントハンドラ

イベントハンドラは、アプリ開始や、キー押下などのイベントが発生した時に然るべき処理をする関数です。アプリウィザードによって、キーハンドラが設定されています。

// イベント ハンドラ
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;
}

キーハンドラにはキー押下時の処理を記述します。

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

    switch (key) {
        case AVK_SELECT: // セレクトキーが押されたら
            Terminate(); // アプリを終了する
            return true;
    }
    return false;
}

5.2.4. コンストラクタ

// コンストラクタ
HelloWorld::HelloWorld(Void)
{
    return;
}

// デストラクタ
HelloWorld::~HelloWorld(Void)
{
    return;
}

現時点では起動しても何も表示されません。