![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0 |
「レスポンダ(SFRResponder)」とは、SophiaFramework が標準で提供するウインドウ、ボタン、メニュー、ダイアログなどの UI コンポーネントのことです。
SophiaFramework は、キー入力などのイベントを処理するイベント処理エンジン、レスポンダを描画する描画処理エンジンを提供します。
「レスポンダ」は、レスポンダ単位でソース コードを複数のプロジェクトで再利用できます。また、デザインや動作などをカスタマイズした独自の「レスポンダ」も実装できます。
関連情報 : SophiaFramework GUI フレームワーク
レスポンダのタイプは、以下の 6 種類があります。
表 10.1. レスポンダのタイプ
| 基底クラス名 | 解説 |
|---|---|
| SFRApplication | アプリを表すレスポンダです。 |
| SFRWindow | ウィンドウを表すレスポンダです。 |
| SFRDialog | ダイアログを表すレスポンダです。 |
| SFRMenu | メニューを表すレスポンダです。 |
| SFRControl | コントロールを表すレスポンダです。 |
| SFRPane | ペインを表すレスポンダです。 |
アプリ ( SFRApplication )でウィンドウ ( SFRWindow )と メニュー ( SFRMenu ) を制御し、ウィンドウ ( SFRWindow )で コントロール ( SFRControl ) や ペイン ( SFRPane ) を制御するプログラミング方式になっています。
ひとつのアプリには SFRApplication を継承するアプリ クラスがひとつだけ必要です。SophiaFramework アプリのプログラミングはこのクラスの記述から始まります。
ウィンドウ や メニュー、コントロール、ペインは定義できる数に制限はありません。
アプリ、ウィンドウ、メニュー、など、すべての「レスポンダ」は 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.8. コントロール( SFRButtonControl, SFRCheckboxControl, SFRRadiobuttonControl, SFRLabelControl, SFRComboboxControl, SFREditboxControl )

レスポンダは SophiaFramework で標準提供されるレスポンダ クラスを継承して定義し、実装します。
関連情報: 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 で利用可能なイベントは 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 - 2008 Sophia Cradle Incorporated All Rights Reserved. |
![]() ![]() ![]()
|