SophiaFramework UNIVERSE 5.3 |
コントロールは、ウインドウ内に配置するレスポンダです。
表 10.6. コントロールの種類
クラス名 | 解説 |
---|---|
SFRButtonControl | ボタンコントロールを表すレスポンダです。 |
SFRCheckboxControl | チェックボックスコントロールを表すレスポンダです。 |
SFRRadiobuttonControl | ラジオボタンコントロールを表すレスポンダです。 |
SFRLabelControl | ラベルコントロールを表すレスポンダです。 |
SFRComboboxControl | コンボボックスコントロールを表すレスポンダです。 |
SFREditboxControl | エディットコントロールを表すレスポンダです。 |
SFRTabControl | タブコントロールを表すレスポンダです。 |
SFRBrowserControl | 簡易ウェブブラウザコントロールです。 |
コントロールの作成と破棄は レスポンダの作成 と同様です。
例 10.26. ボタンの定義
SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRTitleWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void) static_throws; virtual ~MyWindow(Void) { return; } // ボタンをポインタ型のメンバ変数として定義する SFRButtonControlPtr _button; // ボタン };
例 10.27. ボタンの作成
// コンストラクタ ( エラー処理は省略 ) MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250), "my window") static_throws { // ボタンの作成 // 第 1 引数 : 親レスポンダ // 第 2 引数 : ボタンの位置とサイズ // 第 3 引数 : ボタンの名前 _button = new SFRButtonControl(this, SFXRectangle(20, 50, 150, 25), "button"); return; }
例 10.28. チェックボックスの定義
SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRTitleWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void) static_throws; virtual ~MyWindow(Void) { return; } // チェックボックスをポインタ型のメンバ変数として定義する SFRCheckboxControlPtr _checkbox; // チェックボックス };
例 10.29. チェックボックスの作成
// コンストラクタ ( エラー処理は省略 ) MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250), "my window") static_throws { // チェックボックスの作成 // 第 1 引数 : 親レスポンダ // 第 2 引数 : チェックボックスの位置とサイズ // 第 3 引数 : チェックボックスの名前 _checkbox = new SFRCheckboxControl(this, SFXRectangle(20, 50, 150, 25), "checkbox"); return; }
例 10.30. ラジオボタンの定義
SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRTitleWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void) static_throws; virtual ~MyWindow(Void) { return; } // ラジオボタンをポインタ型のメンバ変数として定義する SFRRadiobuttonControlPtr _radiobutton1; // ラジオボタン1 SFRRadiobuttonControlPtr _radiobutton2; // ラジオボタン2 };
例 10.31. ラジオボタンの作成
// コンストラクタ ( エラー処理は省略 ) MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250), "my window") static_throws { // ラジオボタンの作成 // 第 1 引数 : 親レスポンダ // 第 2 引数 : ラジオボタンの位置とサイズ // 第 3 引数 : ラジオボタンの名前 _radiobutton1 = new SFRRadiobuttonControl(this, SFXRectangle(20, 50, 150, 25), "radiobutton1"); _radiobutton2 = new SFRRadiobuttonControl(this, SFXRectangle(20, 80, 150, 25), "radiobutton2"); // ラジオボタンのグループ化を行う _radiobutton2->Group(_radiobutton1); // radiobutton1 を選択状態にする _radiobutton1->SetStatusCheck(true); return; }
例 10.32. ラベルの定義
SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRTitleWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void) static_throws; virtual ~MyWindow(Void) { return; } // ラベルをポインタ型のメンバ変数として定義する SFRLabelControlPtr _label; // ラベル };
例 10.33. ラベルの作成
// コンストラクタ ( エラー処理は省略 ) MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250), "my window") static_throws { // ラベルの作成 // 第 1 引数 : 親レスポンダ // 第 2 引数 : ラベルの位置とサイズ // 第 3 引数 : ラベルの名前 _label = ::new SFRLabelControl(this, SFXRectangle(30, 50, 150, 25), "LabelControl"); return; }
例 10.34. コンボボックスの定義
SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRTitleWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void) static_throws; virtual ~MyWindow(Void) { return; } // コンボボックスをポインタ型のメンバ変数として定義する SFRComboboxControlPtr _combobox; // コンボボックス };
例 10.35. コンボボックスの作成
// コンストラクタ ( エラー処理は省略 ) MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250), "my window") static_throws { SFXWideString item[] = {"combobox1", "combobox2", "combobox3"}; // コンボボックスの作成 // 第 1 引数 : 親レスポンダ // 第 2 引数 : コンボボックスの位置とサイズ // 第 3 引数 : コンボボックスの名前 _combobox = new SFRComboboxControl(this, SFXRectangle(20, 50, 150, 25), item, lengthof(item)); return; }
例 10.36. テキストボックス の定義
SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRTitleWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void) static_throws; virtual ~MyWindow(Void) { return; } // テキストボックスをポインタ型のメンバ変数として定義する SFREditboxControlPtr _editbox; // テキストボックス };
例 10.37. テキストボックスの作成
// コンストラクタ ( エラー処理は省略 ) MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250), "my window") static_throws { // テキストボックスの作成 // 第 1 引数 : 親レスポンダ // 第 2 引数 : テキストボックス の位置とサイズ // 第 3 引数 : テキストボックス の名前 _editbox = new SFREditboxControl(this, SFXRectangle(20, 50, 150, 25), "Editbox"); return; }
例 10.38. タブの定義
SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRTitleWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void) static_throws; virtual ~MyWindow(Void) { return; } //タブをポインタ型のメンバ変数として定義する SFRTabControlPtr _tab; //タブ SFRTabPanePtr _pane; //タブに使うタブペイン };
例 10.39. タブの作成
// コンストラクタ ( エラー処理は省略 ) MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250), "my window") static_throws { //タブの作成 // 第 1 引数 : 親レスポンダ // 第 2 引数 :タブの位置とサイズ _tab = ::new SFRTabControl(this, SFXRectangle(20, 30, 150, 150)); //タブペインを作成 _pane = new SFRTabPane(_tab, "page1"); _pane = new SFRTabPane(_tab, "page2"); return; }
例 10.40. 簡易ウェブブラウザの定義
SFMTYPEDEFCLASS(MyWindow) class MyWindow : public SFRTitleWindow { SFMSEALCOPY(MyWindow) public: MyWindow(Void) static_throws; virtual ~MyWindow(Void) { return; } // 簡易ウェブブラウザをポインタ型のメンバ変数として定義する SFRBrowserControlPtr _browser; // 簡易ウェブブラウザ };
例 10.41. 簡易ウェブブラウザの作成
// コンストラクタ ( エラー処理は省略 ) MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250), "my window") static_throws { // 表示するブラウザを文字列で入力 SFXAnsiString buffer( "BrowserControl<br /><br />" "<a href=\"/example/tabbrowser/\">ソフィアクレイドル</a><br /><br />" ); // 簡易ウェブブラウザの作成 // 第 1 引数 : 親レスポンダ // 第 2 引数 :タブの位置とサイズ _browser = ::new SFRBrowserControl(this, rect); //文字列データを HTML とみなして、レンダリングを開始 _browser->Load(buffer); return; }
方向キーでコントロールを選択するには「フォーカス」を制御します。コントロールはフォーカスが当たると色が変わります。
「フォーカス」を移動する関数として、以下の関数が提供されています。
表 10.7. フォーカスを移動させる関数
関数名 | 解説 |
---|---|
FocusPrevious | 1つ前の兄弟レスポンダにフォーカスを移動します。 |
FocusNext | 1つ後の兄弟レスポンダにフォーカスを移動します。 |
FocusUp | 1つ上のレスポンダにフォーカスを移動します。 |
FocusDown | 1つ下のレスポンダにフォーカスを移動します。 |
FocusLeft | 1つ左のレスポンダにフォーカスを移動します。 |
FocusRight | 1つ右のレスポンダにフォーカスを移動します。 |
例 10.42. フォーカス移動のコード
// キーハンドラ HANDLER_IMPLEMENT_BOOLEVENT(MyWindow, OnKey, event) { switch (event.GetP16()) { // フォーカスを移動する 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; }
GetStatusFocus 関数を使えば、コントロールがフォーカスを持つか否かを判定できます。
また、GetFocus 関数を使えば、子階層のレスポンダでフォーカスを持つレスポンダを取得できます。
コントロールにはあらかじめデフォルトの動作が設定されています。
例えば、フォーカスを当てた状態でセレクトキーを押すと、下図のように動作します。
コントロールは状態を取得するメンバ関数を持ちます。
コントロールは、選択できないように無効化したり、非表示にしたりできます。
表 10.9. コントロールを有効/無効、表示/非表示にする関数
関数名 | 解説 |
---|---|
SetStatusEnable | レスポンダの応答可能 / 不可能フラグを設定します。(引数 true : 有効、false : 無効) |
GetStatusEnable | レスポンダの応答可能 / 不可能フラグを取得します。 |
SetStatusVisible | レスポンダの可視 / 不可視フラグを設定します。(引数 true : 表示、false : 非表示) |
GetStatusVisible | レスポンダの可視 / 不可視フラグを取得します。 |
コントロールにはイベントハンドラを登録できます。
下のコードでは、SFRButtonControl インスタンスには「ボタンを押したときに発生するイベント」、 SFRComboboxControl インスタンスには「コンボボックスの選択が変更されたときに発生するイベント」のハンドラを それぞれ登録しています。
例 10.46. ボタンのイベントハンドラ
class MyWindow : public SFRTitleWindow { private: SFRButtonControlPtr _button; // ボタンへのポインタ public: // ボタンハンドラの宣言 HANDLER_DECLARE_VOIDCONTROL(OnButtonControl) }; // ボタンハンドラの定義 // 第 1 引数 : 所属クラス、第 2 引数 : ハンドラ名、第 3 引数 : 結果値 ( UInt16 型)、第 4 引数 : コントロールへのポインタ HANDLER_IMPLEMENT_VOIDCONTROL(MyWindow, OnButtonControl, result, control) { TRACE("Hello Button"); // デバッグ画面に "Hello Button" を表示 } // コンストラクタ MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250), "my window") static_throws { // ボタンの作成 _button = new SFRButtonControl(this, SFXRectangle(10, 10, 50, 25), "button name"); // イベントハンドラの登録 _button->RegisterHandler(SREVT_CONTROL, HANDLER_BEFORE, HANDLER_FUNCTION(OnButtonControl))); }
ハンドラの宣言、定義には HANDLER_DECLARE_??????、HANDLER_IMPLEMENT_?????? マクロを、登録には RegisterHandler 関数を用います。
例 10.47. コンボボックスのイベントハンドラボタン
class MyWindow : public SFRTitleWindow { private: SFRComboboxControlPtr _combobox; // コンボボックスへのポインタ public: // コンボボックスハンドラの宣言 HANDLER_DECLARE_VOIDCONTROL(OnComboboxControl) }; // コンボボックスハンドラの定義 HANDLER_IMPLEMENT_VOIDCONTROL(MyWindow, OnComboboxControl, result, control) { if (result == SRP16_ESCAPE) { // 項目が選択されずにキャンセルされたとき // 何も処理しない } else { // result は選択した項目番号 // control はコンボボックスのポインタ // GetTitle で選択項目の文字列を取得 SFXAnsiString string(static_cast<SFRComboboxControlPtr>(control)->GetTitle(result)); // デバッグ画面に文字列表示 // string.GetCString() で C 言語文字列を取得 TRACE("'%d: %s' is selected.", result, string.GetCString()); } } // コンストラクタ MyWindow::MyWindow(Void) : SFRTitleWindow(SFRApplication::GetInstance(), SFXRectangle(20, 20, 200, 250), "my window") static_throws { // コンボボックスの項目 SFXWideString item[] = {"item1", "item2", "item3"}; // コンボボックスの作成 _combobox = new SFRComboboxControl(this, SFXRectangle(10, 165, 90, 20), item, lengthof(item)); // イベントハンドラの登録 _combobox->RegisterHandler(SREVT_CONTROL, HANDLER_BEFORE, HANDLER_FUNCTION(OnComboboxControl))); }
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |