SophiaFramework UNIVERSE 5.3 |
SFYResponder はレスポンダシステムの核となるクラスであり、 すべてのレスポンダクラスは SFYResponder クラスを継承します。
独自にユーザー定義レスポンダクラスを作成する場合、 SFYResponder クラスを継承するクラスを起点にできれば、 実装はそれだけ容易になります。
たとえば、自分自身を描画する機能を持つ独自レスポンダクラスを実装する場合は、 SFYResponder クラスよりも SFYWidget クラスを起点にする方が簡単でしょう。
自分自身の描画以外にも他の機能を持つレスポンダの実装では、 SFYContainer、SFZWindow、 や SFZDialog などのより具象化されたクラスを起点にすれば、 実装はそれだけ容易になるでしょう。
以下は、レスポンダシステムに標準で組み込まれている抽象レスポンダクラスの一覧です。 これらは、カスタマイズされたユーザー定義レスポンダクラスを実装するための起点として使用されます。
表 9.4. 抽象レスポンダの種類
クラス名 | 解説 |
---|---|
SFYResponder | レスポンダを表す抽象クラスです。 |
SFYWidget | ウィジェットを表す抽象クラスです。 |
SFYContainer | コンテナを表す抽象クラスです。 |
SFZWindow | ウィンドウを表す抽象クラスです。 |
SFZDialog | ダイアログを表す抽象クラスです。 |
SFYMenu | メニューを表す抽象クラスです。 |
SFYControl | コントロールを表す抽象クラスです。 |
SFYLabelControl | ラベルコントロールを表す抽象クラスです。 |
SFYBoxControl | ボックスコントロールを表す抽象クラスです。 |
SFYButtonControl | ボタンコントロールを表す抽象クラスです。 |
SFYCheckboxControl | チェックボックスコントロールを表す抽象クラスです。 |
SFYRadiobuttonControl | ラジオボタンコントロールを表す抽象クラスです。 |
SFYScrollBarControl | スクロールバーコントロールを表す抽象クラスです。 |
SFYTabControl | タブコントロールを表す抽象クラスです。 |
SophiaFramework UNIVERSE 標準提供レスポンダ | |
---|---|
ユーザー定義レスポンダクラスは、 上記の抽象レスポンダクラスを含む SophiaFramework UNIVERSE 標準提供レスポンダクラスを起点にして実装します。 |
重要 | |
---|---|
ほとんどの具象レスポンダにおいて、 SFYResponder::SetParent 関数、 SFYResponder::SetState 関数、 SFYResponder::SetRealBound 関数の呼び出しは必須です。 その他の関数の呼び出しは省略可能です。 |
SFYResponder は、 レスポンダクラスを実装するときの最初の起点(基底クラス)となります。 このクラスには、すべてのレスポンダに共通する要素や機能が実装されています。
以下にユーザー定義レスポンダを作成するときに最低限必要なコードを示します。
例 9.36. 宣言
SFMTYPEDEFRESPONDER(USRResponder) class USRResponder: public SFYResponder { SFMSEALRESPONDER(USRResponder) SFMRESPONDERINSTANTIATEONE(USRResponder, SFYResponder) public: // レスポンダのタイプを定義する // 小文字と記号のみからなるタイプは予約されているので使えない enum CodeEnum { CODE_TYPE = four_char_code('U', 'R', 'S', 'P') }; SFMTYPEDEFTYPE(CodeEnum) public: static USRResponderSmp NewInstance(SFCErrorPtr exception = null); protected: explicit USRResponder(Void) static_throws; virtual ~USRResponder(Void); };
例 9.37. 実装
// コンストラクタ USRResponder::USRResponder(Void) static_throws { if (static_try()) { // レスポンダのタイプを設定する SetType(CODE_TYPE); // 初期化処理を記述する } } // デストラクタ USRResponder::~USRResponder(Void) { // 終了処理を記述する } // スマートポインタで管理されるインスタンスを生成する関数 USRResponderSmp USRResponder::NewInstance(SFCErrorPtr exception) { return static_pointer_cast<USRResponder>(Factory(::new USRResponder, exception)); }
コンストラクタやデストラクタ内の return 文 | |
---|---|
C++ ではコンストラクタやデストラクタでは return 文を記述しません。 GCC を使う場合、コンストラクタやデストラクタ内で return 文を記述すると、 特定の継承関係になっているときにコンパイラがフリーズするバグが確認されています。 |
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |