![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク : SophiaFramework 3.0 |
以降の章では、サンプルコードを用いてGUI フレームワークを解説します。アプリウィザードで作成したコードにサンプルコードをコピー ペーストで追加し、エミュレータで実行させてみてください。
図のようなウィンドウを表示します。アプリウィザードで生成したコードに以下のコードを追加します。

宣言
// ウィンドウを表示するには、SFRTitleWindow を継承したクラスを作成する SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRTitleWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void) static_throws; virtual ~MyWindow(Void); HANDLER_DECLARE_VOIDRENDER(MyWindow, OnRenderContent) HANDLER_DECLARE_BOOLEVENT(MyWindow, OnKey) };
関数定義
// コンストラクタ(ウィンドウ生成時に実行) // ウィンドウは 座標 (20, 20) に、幅200、高さ250 で作られる。 // タイトルは "my window" MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250), "my window") static_throws { // 描画ハンドラを登録 (エラー処理は省略) RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT, HANDLER_BEFORE, HANDLER_FUNCTION(OnRenderContent)); // キー ハンドラを登録 RegisterHandler(SFEVT_KEY, HANDLER_AFTER, HANDLER_FUNCTION(OnKey)); return; } // デストラクタ(ウィンドウ破棄時に実行) MyWindow::~MyWindow(Void) { return; } // 描画ハンドラ(ウィンドウ内に描画) HANDLER_IMPLEMENT_VOIDRENDER(MyWindow, OnRenderContent, graphics) { // 画面を描画 // 白く塗りつぶす // GetContentWorld() はウィンドウの中の描画領域を表す四角形(SFXRectangle)を返す // SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00) は色を表す(左からR,G,B,アルファ値)。 graphics->FillRectangle(GetContentWorld(), SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00)); // "Hello Window" 文字列表示 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; }
ハンドラの宣言や定義は HelloWorld クラスとほとんど同じです。
MyWindow を生成、表示します。HelloWorld のキーハンドラに太字の部分のコードを追加します(数字の1キーを押すとウィンドウ生成)。
// HelloWorld のキー ハンドラ
HANDLER_IMPLEMENT_BOOLEVENT(HelloWorld, OnKey, event)
{
switch (event.GetP16()) {
case AVK_SELECT: // セレクト キーが押されたら
Terminate(); // アプリを終了する。
return true;
//*** 太字の部分を追加
case AVK_1:
// new 演算子でウィンドウ生成 (エラー処理は省略)
new MyWindow();
// キーを処理したなら true を返す
return true;
}
return false;
}
このままでは背景が白く塗りつぶされないので、HelloWorld の描画ハンドラを修正します。
// HelloWorld の描画ハンドラ HANDLER_IMPLEMENT_VOIDRENDER(HelloWorld, OnRenderContent, graphics) { //*** ↓以下を追加 // 白く塗りつぶす // GetContentWorld() はウィンドウの中の描画領域を表す四角形(SFXRectangle)を返す // SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00) は色を表す(左からR,G,B,アルファ値)。 graphics->FillRectangle(GetContentWorld(), SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00)); //*** ↓以下を修正 graphics->DrawText("Hello World", GetContentWorld(), SFXRGBColor(0x00, 0x00, 0x00, 0x00)); return; }
ここまでのコードを実行してみると図のようになります。1 キーを押すとウィンドウが表示されます。もう一度 1 キーを押すとデバッグ ウィンドウに "1-key" が表示されます。クリアー キー (キーボードではBack Space) を押すとウィンドウが破棄されます。

デバッグ ウィンドウ

![]() |
注意 |
|---|---|
デバッグ ウィンドウが表示されていない場合は、メニューから [表示] - [出力ウィンドウ] を選ぶと表示されます。 | |
|
Copyright (C) 2002 - 2009 Sophia Cradle, Inc. All Rights Reserved. |
![]() ![]() ![]()
|