![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0 |
SophiaFramework AppWizard が生成した HelloWorld アプレットのコードをカスタマイズします。
例 4.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" 文字列の描画とセレクトキーの処理についてのハンドラを実装します。
例 4.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 キーを押すとウィンドウが表示されるようにキーハンドラをカスタマイズします。
例 4.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 を返す
}
背景が白く塗りつぶされるように描画ハンドラをカスタマイズします。
例 4.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 - 2008 Sophia Cradle Incorporated All Rights Reserved. |
![]() ![]() ![]()
|