SophiaFramework UNIVERSE 5.3 |
「レスポンダ(SFRResponder)」とは、SophiaFramework UNIVERSE が標準で提供するウインドウ、ボタン、メニュー、ダイアログなどの UI コンポーネントのことです。
SophiaFramework UNIVERSE は、キー入力などのイベントを処理するイベント処理エンジン、レスポンダを描画する描画処理エンジンを提供します。
「レスポンダ」は、レスポンダ単位でソース コードを複数のプロジェクトで再利用できます。また、デザインや動作などをカスタマイズした独自の「レスポンダ」も実装できます。
参照: SophiaFramework UNIVERSE GUI フレームワーク
レスポンダのタイプは、以下の 6 種類があります。
表 10.1. レスポンダのタイプ
基底クラス名 | 解説 |
---|---|
SFRApplication | アプリを表すレスポンダです。 |
SFRWindow | ウィンドウを表すレスポンダです。 |
SFRDialog | ダイアログを表すレスポンダです。 |
SFRMenu | メニューを表すレスポンダです。 |
SFRControl | コントロールを表すレスポンダです。 |
SFRPane | ペインを表すレスポンダです。 |
アプリケーション( SFRApplication )でウィンドウ ( SFRWindow )と メニュー ( SFRMenu ) を制御し、ウィンドウ ( SFRWindow )で コントロール ( SFRControl ) や ペイン ( SFRPane ) を制御するプログラミング方式になっています。
ひとつのアプリには SFRApplication クラスを継承するアプリケーションクラスがひとつだけ必要です。SophiaFramework UNIVERSE アプリのプログラミングはこのクラスの記述から始まります。
ウィンドウ や メニュー、コントロール、ペインは定義できる数に制限はありません。
アプリケーション、ウィンドウ、メニュー、など、すべての「レスポンダ」は SFRResponder クラスを継承します。
表 10.2. レスポンダの種類
クラス名 | タイプ | アトリビュート | 解説 |
---|---|---|---|
SFRApplication | TYPE_SFRAPPLICATION ( アプリケーション ) | ATTRIBUTE_SFRAPPLICATION | アプリを表すレスポンダです。 |
SFRWindow | TYPE_SFRWINDOW ( ウィンドウ ) | ATTRIBUTE_SFRWINDOW | ウィンドウを表すレスポンダです。 |
SFRPlainWindow | TYPE_SFRWINDOW ( ウィンドウ ) | ATTRIBUTE_SFRPLAINWINDOW | タイトルやフレームのないプレーンなウィンドウを表すレスポンダです。 |
SFRFrameWindow | TYPE_SFRWINDOW ( ウィンドウ ) | ATTRIBUTE_SFRFRAMEWINDOW | フレーム付きのウィンドウを表すレスポンダです。 |
SFRTitleWindow | TYPE_SFRWINDOW ( ウィンドウ ) | ATTRIBUTE_SFRTITLEWINDOW | タイトル付きのウィンドウを表すレスポンダです。 |
SFRDialog | TYPE_SFRDIALOG ( ダイアログ ) | ATTRIBUTE_SFRDIALOG | ダイアログを表すレスポンダです。 |
SFRPlainDialog | TYPE_SFRDIALOG ( ダイアログ ) | ATTRIBUTE_SFRPLAINDIALOG | タイトルやフレームのないプレーンなダイアログを表すレスポンダです。 |
SFRFrameDialog | TYPE_SFRDIALOG ( ダイアログ ) | ATTRIBUTE_SFRFRAMEDIALOG | フレーム付きのダイアログを表すレスポンダです。 |
SFRTitleDialog | TYPE_SFRDIALOG ( ダイアログ ) | ATTRIBUTE_SFRTITLEDIALOG | タイトル付きのダイアログを表すレスポンダです。 |
SFRMessageDialog | TYPE_SFRDIALOG ( ダイアログ ) | ATTRIBUTE_SFRMESSAGEDIALOG | 最高 1 つのボタンを持つメッセージダイアログです。 |
SFRMultiDialog | TYPE_SFRDIALOG ( ダイアログ ) | ATTRIBUTE_SFRMULTIDIALOG | 最高 3 つのボタンを持つ選択ダイアログです。 |
SFRMenu | TYPE_SFRMENU ( メニュー ) | ATTRIBUTE_SFRMENU | メニューを表すレスポンダです。 |
SFRPlainMenu | TYPE_SFRMENU ( メニュー ) | ATTRIBUTE_SFRPLAINMENU | タイトルやフレームのないプレーンなメニューを表すレスポンダです。 |
SFRFrameMenu | TYPE_SFRMENU ( メニュー ) | ATTRIBUTE_SFRFRAMEMENU | フレーム付きのメニューを表すレスポンダです。 |
SFRTitleMenu | TYPE_SFRMENU ( メニュー ) | ATTRIBUTE_SFRTITLEMENU | タイトル付きのメニューを表すレスポンダです。 |
SFRTextMenu | TYPE_SFRMENU ( メニュー ) | ATTRIBUTE_SFRTEXTMENU | テキストメニューを表すレスポンダです。 |
SFRPane | TYPE_SFRPANE ( ペイン ) | ATTRIBUTE_SFRPANE | ペインを表すレスポンダの基底クラスです。 |
SFRPlainPane | TYPE_SFRPANE ( ペイン ) | ATTRIBUTE_SFRPLAINPANE | タイトルやフレームのないプレーンなペインを表すレスポンダです。 |
SFRTabPane | TYPE_SFRPANE ( ペイン ) | ATTRIBUTE_SFRTABPANE | タブコントロール ( SFRTabControl ) に使うタブペインを表すレスポンダです。 |
SFRControl | TYPE_SFRCONTROL ( コントロール ) | ATTRIBUTE_SFRCONTROL | コントロールの基底クラス |
SFRButtonControl | TYPE_SFRCONTROL ( コントロール ) | ATTRIBUTE_SFRBUTTONCONTROL | ボタンコントロールを表すレスポンダです。 |
SFRCheckboxControl | TYPE_SFRCONTROL ( コントロール ) | ATTRIBUTE_SFRCHECKBOXCONTROL | チェックボックスコントロールを表すレスポンダです。 |
SFRRadiobuttonControl | TYPE_SFRCONTROL ( コントロール ) | ATTRIBUTE_SFRRADIOBUTTONCONTROL | ラジオボタンコントロールを表すレスポンダです。 |
SFRLabelControl | TYPE_SFRCONTROL ( コントロール ) | ATTRIBUTE_SFRLABELCONTROL | ラベルコントロールを表すレスポンダです。 |
SFRComboboxControl | TYPE_SFRCONTROL ( コントロール ) | ATTRIBUTE_SFRCOMBOBOXCONTROL | コンボボックスコントロールを表すレスポンダです。 |
SFREditboxControl | TYPE_SFRCONTROL ( コントロール ) | ATTRIBUTE_SFREDITBOXCONTROL | エディットコントロールを表すレスポンダです。 |
SFRTabControl | TYPE_SFRCONTROL ( コントロール ) | ATTRIBUTE_SFRTABCONTROL | タブコントロールを表すレスポンダです。 |
SFRBrowserControl | TYPE_SFRCONTROL ( コントロール ) | ATTRIBUTE_SFRBROWSERCONTROL | 簡易ウェブブラウザコントロールです。 |
図 10.3. ウィンドウ ( SFRPlainWindow, SFRFrameWindow, SFRTitleWindow )
図 10.4. ダイアログ ( SFRPlainDialog, SFRFrameDialog, SFRTitleDialog )
図 10.5. ダイアログ ( SFRMessageDialog, SFRMultiDialog )
図 10.6. メニュー( SFRTextMenu )
図 10.7. ペインとタブコントロール( SFRPlainPane, SFRTabPane, SFRTabControl )
図 10.8. コントロール( SFRButtonControl, SFRCheckboxControl, SFRRadiobuttonControl, SFRLabelControl, SFRComboboxControl, SFREditboxControl )
レスポンダは SophiaFramework UNIVERSE で標準提供されるレスポンダクラスを継承して定義し、実装します。
関連情報: SFR GUI フレームワークを使う開発 : ウィンドウ
例 10.1. タイトルウィンドウ の定義と実装 ( SFRTitleWindow )
// 座標 : ( 20 , 20 )、幅 : 200、高さ : 250、タイトル : "my window" SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRTitleWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void); virtual ~MyWindow(Void); }; // コンストラクタ MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250), "my window") { return; }
レスポンダは new 演算子を使用して作成します。
例 10.3. ボタンの作成 ( SFRButtonControl )
SFRButtonControlPtr button; // ボタンコントロールへのポインタ SFXSize devsize; // 画面サイズ SFXAnsiString str = "Button"; // ボタンの名称 SInt16 fontWidth = SFXGraphics::MeasureText(AEE_FONT_NORMAL, str); // フォントの幅 SInt16 fontHeight = SFXGraphics::GetFontHeight(AEE_FONT_NORMAL); // フォントの高さ devsize = SFXGraphics::GetDeviceSize(); //デバイスの画面サイズ SInt16 devWidth = devsize.GetWidth(); //デバイスの幅 SInt16 devHeight = devsize.GetHeight(); //デバイスの高さ // ボタンの作成 // 座標 : ( ( 画面の中央の幅 - フォントの幅 * 2 ) / 2, ( 画面の中央の高さ - フォントの高さ * 2 ) / 2 ) // 幅 : フォントの幅 * 2 // 高さ : フォントの高さ * 2 // タイトル : "Button" button = ::new SFRButtonControl(this, SFXRectangle((devWidth - fontWidth * 2) / 2, (devHeight- fontHeight * 2) / 2, fontWidth * 2 , fontHeight * 2), str);
レスポンダは、アプリの終了時に自動的に破棄されます。
※ レスポンダを明示的に破棄するには下記のコードのように Invoke 関数を使用して SREVT_RESPONDER_TERMINATE イベントを送信します。( delete 演算子で破棄できません。 )
例 10.4. レスポンダの破棄
responder->Invoke(SFXEvent(SREVT_RESPONDER_TERMINATE, SRP16_TERMINATE_INVOKE, true));
警告 | |
---|---|
new 演算子で作成に失敗したレスポンダは delete 演算子で破棄します。 |
例 10.5. レスポンダの作成 ( SFRPlainWindow )
SFRWindowPtr window; // new 演算子でプレーンウィンドウ作成する if ((window = new SFRPlainWindow(this, SFXRectangle(0, 0, 100, 100))) != null) { static_throw(*window); if (!static_try()) { // プレーンウィンドウ作成時にエラーが発生したとき delete window; // delete 演算子を使用してプレーンウィンドウを破棄する } } else { static_throw(SFERR_NO_MEMORY); }
イベントハンドラは、アプリ開始や、キー押下などのイベントに応じて然るべき処理をする関数です。SophiaFramework UNIVERSE で利用可能なイベントは SFCEventEnum を参照してください。
イベントハンドラの定義
イベントハンドラを定義するには HANDLER_IMPLEMENT_ で始まる名前のマクロを用います。
例 10.6. キーハンドラの定義
// キーハンドラの定義(ウィンドウが最前面にあるときにキーが押されると実行される) // 第 1 引数 : 所属クラス、第 2 引数 : ハンドラ名、第 3 引数 : イベント値 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 キーの場合 ... return true; // 押されたキーの処理をしたときは true を返す } return false; // 押されたキーの処理をしなかったときは false を返す }
イベントハンドラの宣言
イベントハンドラを宣言するには HANDLER_DECLARE_ で始まる名前のマクロを使います。
例 10.7. キーハンドラの宣言
// MyWindow クラスの定義 SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRTitleWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void) static_throws; virtual ~MyWindow(Void) { return; } // イベントハンドラの宣言 // 引数はハンドラ名 HANDLER_DECLARE_BOOLEVENT(OnKey) };
イベントハンドラの登録
イベントハンドラは RegisterHandler 関数で登録します。
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |