SophiaFramework UNIVERSE 5.3 |
SophiaFramework UNIVERSE AppWizard が生成した HelloWorld アプリのコードをカスタマイズします。
例 5.9. タイトルウィンドウ MyWindow の定義
// SFRTitleWindow を継承する
SFMTYPEDEFCLASS(MyWindow)
class MyWindow : public SFRTitleWindow {
SFMSEALCOPY(MyWindow)
public:
MyWindow(Void) static_throws;
virtual ~MyWindow(Void);
private:
HANDLER_DECLARE_VOIDRENDER(OnRenderContent)
HANDLER_DECLARE_BOOLEVENT(OnKey)
};
"Hello Window" 文字列の描画とセレクトキーの処理についてのハンドラを実装します。
例 5.10. タイトルウィンドウ MyWindow の実装
// コンストラクタ // 座標 : (20, 20)、幅 : 200、高さ : 250 // タイトル : "my window" MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250), "my window") static_throws { // 描画ハンドラの登録 if (static_try()) { static_throw( RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT, HANDLER_BEFORE, HANDLER_FUNCTION(OnRenderContent))); } // キーハンドラの登録 if (static_try()) { static_throw( RegisterHandler(SFEVT_KEY, HANDLER_AFTER, HANDLER_FUNCTION(OnKey))); } return; } // デストラクタ MyWindow::~MyWindow(Void) { return; } // ウィンドウの描画ハンドラ HANDLER_IMPLEMENT_VOIDRENDER(MyWindow, OnRenderContent, graphics) { // 描画領域を白色で塗りつぶす // GetContentWorld() : ウィンドウ内の描画領域( 矩形 ) // SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00) : 白色 graphics->FillRectangle(GetContentWorld(), SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00)); // 文字列 "Hello Window" を描画する // SFXRGBColor(0x00, 0x00, 0x00, 0x00) : 黒色 graphics->DrawText("Hello Window", GetContentWorld(), SFXRGBColor(0x00, 0x00, 0x00, 0x00)); return; } // キーハンドラ( ウィンドウが前面にあるときにキーが押されると実行される ) HANDLER_IMPLEMENT_BOOLEVENT(MyWindow, OnKey, event) { switch (event.GetP16()) { case AVK_CLR: // クリアー キーのキーイベントを受信したとき // ウィンドウを破棄する return Invoke(SFXEvent(SREVT_RESPONDER_TERMINATE, SRP16_TERMINATE_INVOKE, true)); case AVK_1: // 1 キーのキーイベントを受信したとき // デバッグ文字列をシミュレータのデバッグ用画面に表示する TRACE("1-key"); return true; } return false; }
1 キーを押すとウィンドウが表示されるようにキーハンドラをカスタマイズします。
例 5.11. ウィンドウの作成 : キーハンドラのカスタマイズ
HANDLER_IMPLEMENT_BOOLEVENT(HelloWorld, OnKey, event) { // キーハンドラの処理 switch (event.GetP16()) { case AVK_SELECT: // セレクトキーのキーイベントを受信したとき Terminate(); // アプリを終了する return true; // *** 太字が追加部分 case AVK_1: // 1 キーのキーイベントを受信したとき // new 演算子でウィンドウを作成する new MyWindow(); // キーイベントを処理したので true を返す return true; } return false; // キーイベントを処理しなかったときは false を返す }
背景が白く塗りつぶされるように描画ハンドラをカスタマイズします。
例 5.12. 描画ハンドラのカスタマイズ
// HelloWorld の描画ハンドラ HANDLER_IMPLEMENT_VOIDRENDER(HelloWorld, OnRenderContent, graphics) { // *** 太字が追加部分 // 描画領域を白色で塗りつぶす // GetContentWorld() : ウィンドウの中の描画領域( 矩形 ) // SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00) : 白色 graphics->FillRectangle(GetContentWorld(), SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00)); // *** 以下が修正部分 // 文字列 "Hello World" を描画する // SFXRGBColor(0x00, 0x00, 0x00, 0x00) : 黒色 graphics->DrawText("Hello World", GetContentWorld(), SFXRGBColor(0x00, 0x00, 0x00, 0x00)); return; }
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |