![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク : SophiaFramework 3.0 |
ボタンを設置してみます。
図のようなボタンをMyWindow に設置します。前節で作成したコードに以下のコードを加えます。

// コンストラクタ 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)); //*** 太字の部分を追加 // ボタンを作成 SFRButtonControlPtr button1 = new SFRButtonControl( this, SFXRectangle(10, 10, 50, 25), "b1"); SFRButtonControlPtr button2 = new SFRButtonControl( this, SFXRectangle(10, 45, 50, 25), "b2"); SFRButtonControlPtr button3 = new SFRButtonControl( this, SFXRectangle(10, 80, 50, 25), "b3"); SFRButtonControlPtr button4 = new SFRButtonControl( this, SFXRectangle(70, 10, 50, 25), "b4"); SFRButtonControlPtr button5 = new SFRButtonControl( this, SFXRectangle(70, 45, 50, 25), "b5"); return; }
![]() |
注意 |
|---|---|
SophiaFramework では、ポインタ型を Ptr で表します。SFRButtonControlPtr は SFRButtonControl* と同じ意味です。 | |
設置したボタンはセレクトキーで押すことができます。
フォーカスを移動させるには、キーハンドラに以下のコードを加えます。
// キー ハンドラ 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; //*** 太字の部分を追加 // フォーカスを移動させる case AVK_UP: FocusUp(); return true; case AVK_LEFT: FocusLeft(); return true; case AVK_DOWN: FocusDown(); return true; case AVK_RIGHT: FocusRight(); return true; } return false; }
ここまでのコードを実行してみると、上下左右キーを押すことでフォーカスの移動が確認できます。

ボタンが押されたときに実行するコードを書きます。
ハンドラの宣言
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) //*** 太字の部分を追加 HANDLER_DECLARE_VOIDCONTROL(MyWindow, OnButtonControl1) HANDLER_DECLARE_VOIDCONTROL(MyWindow, OnButtonControl2) };
ハンドラの定義
HANDLER_IMPLEMENT_VOIDCONTROL(MyWindow, OnButtonControl1, result, control) {
TRACE("Hello Button"); // デバッグ画面に "Hello Button" を表示
}
HANDLER_IMPLEMENT_VOIDCONTROL(MyWindow, OnButtonControl2, result, control) {
// ウィンドウを閉じる
Invoke(SFXEvent(SREVT_RESPONDER_TERMINATE, SRP16_TERMINATE_INVOKE, true));
}
ハンドラをコンストラクタで登録します。
// コンストラクタ 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))); // ボタンを作成 SFRButtonControlPtr button1 = new SFRButtonControl( this, SFXRectangle(10, 10, 50, 25), "b1"); SFRButtonControlPtr button2 = new SFRButtonControl( this, SFXRectangle(10, 45, 50, 25), "b2"); SFRButtonControlPtr button3 = new SFRButtonControl( this, SFXRectangle(10, 80, 50, 25), "b3"); SFRButtonControlPtr button4 = new SFRButtonControl( this, SFXRectangle(70, 10, 50, 25), "b4"); SFRButtonControlPtr button5 = new SFRButtonControl( this, SFXRectangle(70, 45, 50, 25), "b5"); //*** 太字の部分を追加 // button1を押したときのハンドラを登録 if (static_try()) { static_throw( button1->RegisterHandler( SREVT_CONTROL, HANDLER_BEFORE, HANDLER_FUNCTION(OnButtonControl1))); } // button2を押したときのハンドラを登録 if (static_try()) { static_throw( button2->RegisterHandler( SREVT_CONTROL, HANDLER_BEFORE, HANDLER_FUNCTION(OnButtonControl2))); } }
セレクトキーでボタンを押すことができます。


|
Copyright (C) 2002 - 2009 Sophia Cradle, Inc. All Rights Reserved. |
![]() ![]() ![]()
|