![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1 |
HelloWorld アプリのコードを例に GUI フレームワークを使わないアプリ ( SFC アプリ ) の基本的な構造と動作の流れを説明します。
例 8.14. GUI フレームワークを使わない HelloWorld アプリ : .hpp ファイル ( クラスの定義 )
// // Helloworld.hpp // // This source code was automatically // generated by SophiaFramework 4.1. // #ifndef __HELLOWORLD_HPP #define __HELLOWORLD_HPP #include <SophiaFramework.hpp> #include "Helloworld.bid" SFMTYPEDEFCLASS(Helloworld) class Helloworld : public SFCApplication { SFMSEALCOPY(Helloworld) public: static SFCInvokerPtr Factory(Void); private: explicit Helloworld(Void) static_throws; virtual ~Helloworld(Void); virtual Bool Invoke(SFXEventConstRef event); Bool OnKey(UInt16 key); // キーハンドラ ( 普通の関数と同じように宣言する ) Void Draw(Void); // "Hello World" を描画する関数 }; #endif // __HELLOWORLD_HPP //
例 8.15. GUI フレームワークを使わない HelloWorld アプリ : ( ブート ローダ、ファクトリ関数、ハンドラの実装 )
// // Helloworld.cpp // // This source code was automatically // generated by SophiaFramework 4.1. // #include "Helloworld.hpp" // ブート ローダ SFCApplet::FactorySPP SFCApplet::Boot(AEECLSID id, SFXAnsiStringPtr license) { *license = "heap://"; return (id == AEECLSID_HELLOWORLD) ? (&Helloworld::Factory) : (null); } // ファクトリ関数 SFCInvokerPtr Helloworld::Factory(Void) { return ::new Helloworld; } // コンストラクタ // イベントハンドラを独自に実装するため、コンストラクタではハンドラ関数を登録しない Helloworld::Helloworld(Void) static_throws { return; } // デストラクタ Helloworld::~Helloworld(Void) { return; } // イベント ハンドラ 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: // セレクト キーが押されたとき Draw(); // " HelloWorld " を描画する return true; } return false; } // 文字列 "HelloWorld" を描画する Void Helloworld::Draw(Void) { // SFXGraphics インスタンスを取得する SFXGraphicsPtr graphics = SFXGraphics::GetInstance(); // 画面を白色に塗りつぶす // SFXGraphics::GetDeviceRectangle() で画面全体( 長方形 )を取得する // SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00) : 白色を表す graphics->FillRectangle(SFXGraphics::GetDeviceRectangle(), SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00)); // 画面に "Hello World" 文字列を描画する // SFXRGBColor(0x00, 0x00, 0x00, 0x00) : 黒色を表す graphics->DrawText("Hello World", SFXGraphics::GetDeviceRectangle(), SFXRGBColor(0x00, 0x00, 0x00, 0x00)); // GUI フレームワークを使わないアプリでは必ず画面を更新する graphics->Update(); }
GUIフレームワークを使わない HelloWorld アプリ クラスは SFCApplication を継承します。
![]() |
注意 |
|---|---|
GUI フレームワークを使う場合は SFRApplication を継承します。 | |
SFCApplication アプリでは、ハンドラ関数の宣言に HANDLER_DECLARE を使いません。例えば、キーハンドラ OnKey 関数は、通常の関数と同じように宣言します。
Invoke 関数は SFCApplication アプリのイベント ハンドラです。Invoke 関数は、受信したイベントに対応するハンドラ関数を呼び出します。
イベントは Invoke 関数の引数として渡され、イベントの type に応じて、ハンドラ関数が呼び出されます。キーイベントの場合、キー ハンドラ OnKey 関数が呼び出されます。
キー ハンドラ OnKey 関数でセレクト キーが押された場合、Draw 関数が呼び出されます。Draw 関数内で画面はクリアされ " Hello World " が描画されます。
![]() |
注意 |
|---|---|
GUI フレームワークを使わないアプリでは、画面を更新するとき、必ず graphics->Update() を実行します。 | |
|
Copyright (C) 2002 - 2008 Sophia Cradle, Inc. All Rights Reserved. |
![]() ![]() ![]()
|