![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1 |
コントロールは、ウインドウ内に配置するレスポンダです。
表 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; }
関連情報 : GUI フレームワークを使う開発 : ボタン
例 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; }
関連情報 : GUI フレームワークを使う開発 : チェック ボックス
例 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; }
関連情報 : GUI フレームワークを使う開発 : ラジオ ボタン
例 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; }
関連情報 : GUI フレームワークを使う開発 : コンボ ボックス
例 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; }
関連情報 : GUI フレームワークを使う開発 : テキスト ボックス
例 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=\"http://www.s-cradle.com/example/tabbrowser/\">ソフィアクレイドル</a><br /><br />" ); // 簡易 ウェブ ブラウザーの作成 // 第 1 引数 : 親レスポンダ // 第 2 引数 : タブの位置とサイズ _browser = ::new SFRBrowserControl(this, rect); //文字列データを HTML とみなして、レンダリングを開始 _browser->Load(buffer); return; }
方向キーでコントロールを選択するには「フォーカス」を制御します。コントロールはフォーカスが当たると色が変わります。
「フォーカス」を移動する関数として、以下の関数が提供されています。
表 10.7. フォーカスを移動させる関数
| 関数名 | 解説 |
|---|---|
| FocusPrevious | 一つ前の兄弟レスポンダにフォーカスを移動します。 |
| FocusNext | 一つ後の兄弟レスポンダにフォーカスを移動します。 |
| FocusUp | 一つ上のレスポンダにフォーカスを移動します。 |
| FocusDown | 一つ下のレスポンダにフォーカスを移動します。 |
| FocusLeft | 一つ左のレスポンダにフォーカスを移動します。 |
| FocusRight | 一つ右のレスポンダにフォーカスを移動します。 |
例 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 - 2008 Sophia Cradle, Inc. All Rights Reserved. |
![]() ![]() ![]()
|