![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1 |
ウィンドウの内部に "Hello World" を描画し、セレクト キーが押されるとウィンドウを閉じる OnlyWindow アプリを以下に示します。
例 8.10. OnlyWindow アプリ : .hpp ファイル ( クラスの定義 )
// // OnlyWindow.hpp // // This source code was automatically // generated by SophiaFramework 4.1. // #ifndef __ONLYWINDOW_HPP #define __ONLYWINDOW_HPP #include <SophiaFramework.hpp> #include "OnlyWindow.bid" SFMTYPEDEFCLASS(OnlyWindow) class OnlyWindow : public SFRApplication { SFMSEALCOPY(OnlyWindow) public: static SFCInvokerPtr Factory(Void); private: OnlyWindow(Void) static_throws; virtual ~OnlyWindow(Void); }; 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) }; #endif // __ONLYWINDOW_HPP //
例 8.11. OnlyWindow アプリ : .cpp ファイル ( ブート ローダとファクトリ関数の実装、ハンドラの実装と登録 )
// // OnlyWindow.cpp // // This source code was automatically // generated by SophiaFramework 4.1. // #include "OnlyWindow.hpp" // ブート ローダ SFCApplet::FactorySPP SFCApplet::Boot(AEECLSID id, SFXAnsiStringPtr license) { *license = "heap://"; return (id == AEECLSID_ONLYWINDOW) ? (&OnlyWindow::Factory) : (null); } // ファクトリ関数 SFCInvokerPtr OnlyWindow::Factory(Void) { return ::new OnlyWindow; } // コンストラクタ OnlyWindow::OnlyWindow(Void) static_throws { SFRWindowPtr window; if (static_try()) { if ((window = ::new MyWindow()) != null) { static_throw(*window); if (!static_try()) { ::delete window; } } else { static_throw(SFERR_NO_MEMORY); } } return; } // デストラクタ OnlyWindow::~OnlyWindow(Void) { return; } // コンストラクタ MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXGraphics::GetDeviceRectangle().Deflate(20, 20), "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) { // 画面に文字列 "Hello World"を描画する graphics->DrawText("Hello World", GetContentWorld(), SFXRGBColor(0x00, 0x00, 0x00, 0x00)); return; } // キーハンドラ HANDLER_IMPLEMENT_BOOLEVENT(MyWindow, OnKey, event) { // キーイベントの処理 switch (event.GetP16()) { case AVK_SELECT:// セレクトキーが押されたとき // ウィンドウを閉じる return Invoke(SFXEvent(SREVT_RESPONDER_TERMINATE, SRP16_TERMINATE_INVOKE, true)); } return false; }
上記コードでは、 タイトル ウィンドウ SFRTitleWindow を継承する、MyWindow クラスを定義しています。 "Hello World" 文字列の描画とセレクトキーの処理についてのハンドラを宣言、登録、実装しています。
OnlyWindow アプリ クラスのコンストラクタでは、MyWindow クラスのインスタンスを生成します。
MyWindow クラスのコンストラクタでは、ハンドラを登録します。 MyWindow クラスのキー ハンドラでは、セレクト キーが押された時に自分自身であるウィンドウを破棄するために、SREVT_RESPONDER_TERMINATE イベントを送信します。
ウィンドウ上に文字列 "Hello World" とボタンを表示し、ボタンが押されると、ウィンドウを閉じる ButtonWindow アプリを以下に示します。
例 8.12. ButtonWindowアプリ : .hpp ファイル ( クラスの定義 )
// // ButtonWindow.hpp // // This source code was automatically // generated by SophiaFramework 4.1. // #ifndef __BUTTONWINDOW_HPP #define __BUTTONWINDOW_HPP #include <SophiaFramework.hpp> #include "ButtonWindow.bid" SFMTYPEDEFCLASS(ButtonWindow) class ButtonWindow : public SFRApplication { SFMSEALCOPY(ButtonWindow) public: static SFCInvokerPtr Factory(Void); private: ButtonWindow(Void) static_throws; virtual ~ButtonWindow(Void); }; SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRTitleWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void) static_throws; virtual ~MyWindow(Void); private: HANDLER_DECLARE_VOIDRENDER(OnRenderContent) HANDLER_DECLARE_VOIDVOID(OnButtonControl) }; #endif // __BUTTONWINDOW_HPP //
例 8.13. ButtonWindowアプリ : .cpp ファイル ( ブート ローダとファクトリ関数の実装、ハンドラの実装と登録 )
// // ButtonWindow.cpp // // This source code was automatically // generated by SophiaFramework 4.1. // #include "ButtonWindow.hpp" // ブート ローダ SFCApplet::FactorySPP SFCApplet::Boot(AEECLSID id, SFXAnsiStringPtr license) { *license = "heap://"; return (id == AEECLSID_BUTTONWINDOW) ? (&ButtonWindow::Factory) : (null); } // ファクトリ関数 SFCInvokerPtr ButtonWindow::Factory(Void) { return ::new ButtonWindow; } // コンストラクタ ButtonWindow::ButtonWindow(Void) static_throws { SFRWindowPtr window; if (static_try()) { if ((window = ::new MyWindow()) != null) { static_throw(*window); if (!static_try()) { ::delete window; } } else { static_throw(SFERR_NO_MEMORY); } } return; } // デストラクタ ButtonWindow::~ButtonWindow(Void) { return; } // コンストラクタ MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXGraphics::GetDeviceRectangle().Deflate(20, 20), "my window") static_throws { SFRButtonControlPtr control; SFXRectangle rect; if (static_try()) { static_throw(RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT, HANDLER_BEFORE, HANDLER_FUNCTION(OnRenderContent))); } // ボタン コントロールの座標を計算する rect = GetContentWorld(); rect.AddTop(rect.GetHeight() - 28); rect.Deflate(2, 2); // ボタン コントロールを生成してハンドラを登録する control = ::new SFRButtonControl(this, rect, "Close"); if (static_try()) { static_throw(control->RegisterHandler(SREVT_CONTROL, HANDLER_BEFORE, HANDLER_FUNCTION(OnButtonControl))); } return; } // デストラクタ MyWindow::~MyWindow(Void) { return; } // 描画ハンドラ HANDLER_IMPLEMENT_VOIDRENDER(MyWindow, OnRenderContent, graphics) { // 親クラスのデフォルト ハンドラを呼び出す SFRTitleWindow::ContentHandler(graphics); // 文字列 "Hello World" を画面に描画する graphics->DrawText("Hello World", GetContentWorld(), SFXRGBColor(0x00, 0x00, 0x00, 0x00)); return; } // ボタン コントロール ハンドラ HANDLER_IMPLEMENT_VOIDCONTROL(MyWindow, OnButtonControl, result, control){ // ボタン コントロールが押されたら、ウィンドウを閉じる Invoke(SFXEvent(SREVT_RESPONDER_TERMINATE, SRP16_TERMINATE_INVOKE, true)); return; }
このサンプルコードでは、MyWindow クラスのコンストラクタではボタンを作成し、ボタンにハンドラを登録しています。ボタンのハンドラでウィンドウを破棄します。
|
Copyright (C) 2002 - 2008 Sophia Cradle, Inc. All Rights Reserved. |
![]() ![]() ![]()
|