![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0 |
ウィンドウは、ルート内に配置されるように設計されたレスポンダです。
すべてのウィンドウは SFZWindow クラスを継承し、実領域よりも大きな仮想領域のスクロール機能とフォーカスの移動機能を提供します。
コントロールを利用するすべてのアプレットは、コントロールを配置するためのコンテナとしてウィンドウを利用します。
また、コントロールを利用するしないにかかわらず、具体的なユーザ インターフェースはアプリケーション クラスに直接記述せずにウィンドウに記述します。
具象ウィンドウはアプレット開発ですぐに使うことができる部品であり、抽象ウィンドウはカスタマイズされたユーザ定義ウィンドウを作成するための起点となります。
表 9.11. 具象ウィンドウの種類
| クラス名 | 解説 |
|---|---|
| SFZWindow | コントロールやコンテナなどを配置する汎用ウィンドウです。 |
| SFZDialog | コントロールやコンテナなどを配置する汎用ダイアログです。 |
![]() |
重要 |
|---|---|
すべてのウィンドウにおいて、SFYResponder::SetParent 関数、SFYResponder::SetState 関数、SFYResponder::SetRealBound 関数の呼び出しは必須です。その他の関数は必要に応じて呼び出すことも省略することもできます。 | |
各種コントロールやコンテナを配置するための汎用的なウィンドウとして機能します。
コントロールやコンテナが配置されている場合、上下キーでフォーカスの移動機能を利用することができます。
仮想領域が実領域よりも大きな場合、フォーカスの移動機能と連動した、仮想領域の上下方向へのスクロール機能を利用することができます。
例 9.38. 宣言
SFMTYPEDEFCLASS(USRApplication)
class USRApplication : public SFYApplication {
SFMSEALCOPY(USRApplication)
private:
SFZWindowSmp _window;
...
private:
SFCError Make(Void);
};
例 9.39. 実装
SFCError USRApplication::Make(Void)
{
SFCError error(SFERR_NO_ERROR);
if ((_window = SFZWindow::NewInstance(&error)) != null) {
error = _window->SetParent(GetThis());
if (error == SFERR_NO_ERROR) {
// 背景色を薄緑色に設定します。
_window->SetBackgroundColor(SFXRGBColor(0xCC, 0xFF, 0xCC, 0x00));
_window->SetRealBound(_window->GetSuitableBound(GetLocalBound().Deflate(10, 10)));
_window->SetState(true, true, true, true);
// ウィンドウを最前面に移動します。
_window->ToFront();
}
}
return error;
}
各種ウィンドウを実装するための起点となります。
このクラスは、いくつかの仮想関数のデフォルトの動作を実装します。
複雑な機能を持ったウィンドウを作成する場合、汎用ウィンドウを継承して利用する方が開発が容易になることがあります。
表 9.13. 仮想関数名とデフォルトの動作
| 仮想関数名 | デフォルトの動作 | オーバーライト |
|---|---|---|
| SFYContainer::HandleScrollUpKey | 仮想領域を上方向にスクロール※1 | 任意 |
| SFYContainer::HandleScrollDownKey | 仮想領域を下方向にスクロール※2 | 任意 |
| SFYContainer::HandlePageUpKey | 仮想領域を上方向に1ページ分スクロール※3 | 任意 |
| SFYContainer::HandlePageDownKey | 仮想領域を下方向に1ページ分スクロール※4 | 任意 |
| SFYContainer::HandleSnapUpKey | 仮想領域を上端までスクロール※5 | 任意 |
| SFYContainer::HandleSnapDownKey | 仮想領域を下端までスクロール※6 | 任意 |
| SFYWidget::HandleBoundRequest | − | 推奨 |
| SFYWidget::HandleBoundOptimize | − | 推奨 |
| SFYWidget::HandleBoundReal | − | 任意 |
| SFYWidget::HandleBoundVirtual | − | 任意 |
| SFYWidget::HandleBoundGlobal | − | 任意 |
| SFYWidget::HandleRenderRequest | − | 任意 |
![]() |
注釈 |
|---|---|
|
※1.ScrollUp() を実行します。 ※2.ScrollDown() を実行します。 ※3.PageUp() を実行します。 ※4.PageDown() を実行します。 ※5.SnapUp() を実行します。 ※6.SnapDown() を実行します。 | |
以下にユーザ定義ウィンドウを作成するときに最低限必要なコードを示します。
例 9.40. 宣言
SFMTYPEDEFRESPONDER(USRWindow)
class USRWindow : public SFZWindow {
SFMSEALRESPONDER(USRWindow)
SFMRESPONDERINSTANTIATEFOUR(USRWindow, SFZWindow, SFYContainer, SFYWidget, SFYResponder)
public:
// このレスポンダのタイプを定義します。
// 小文字と記号のみからなるタイプは SophiaFramework により予約されています。
enum CodeEnum {
CODE_TYPE = four_char_code('U', 'W', 'N', 'D')
};
SFMTYPEDEFTYPE(CodeEnum)
public:
static USRWindowSmp NewInstance(SFCErrorPtr exception = null);
protected:
explicit USRWindow(Void) static_throws;
virtual ~USRWindow(Void);
// 親クラスで定義されている仮想関数のうち、実装が推奨される仮想関数です。
virtual Void HandleBoundRequest(SFXRectanglePtr rectangle) const;
virtual Void HandleBoundOptimize(SFXRectanglePtr rectangle) const;
virtual Void HandleBoundReal(Void);
virtual Void HandleBoundVirtual(Void);
virtual Void HandleRenderRequest(SFXGraphicsPtr graphics) const;
};
例 9.41. 実装
USRWindow::USRWindow(Void) static_throws
{
if (static_try()) {
// このレスポンダのタイプを設定します。
SetType(CODE_TYPE);
// 初期化処理を記述します。
}
}
USRWindow::~USRWindow(Void)
{
// 終了処理を記述します。
}
USRWindowSmp USRWindow::NewInstance(SFCErrorPtr exception)
{
return static_pointer_cast<USRWindow>(Factory(::new USRWindow, exception));
}
Void USRWindow::HandleBoundRequest(SFXRectanglePtr rectangle) const
{
// ウィンドウに最適な大きさを計算して rectangle パラメータに設定します。
// 原点は変更せず、サイズのみを設定することを推奨します。
return;
}
Void USRWindow::HandleBoundOptimize(SFXRectanglePtr rectangle) const
{
// ウィンドウに最適な大きさを rectangle パラメータ内の大きさに
// 収まるように計算し、rectangle パラメータに設定します。
// 原点は変更せず、サイズのみを設定することを推奨します。
return;
}
Void USRWindow::HandleBoundReal(Void)
{
// 実領域が変更された場合に再計算が必要なものがあれば、ここに記述します。
return;
}
Void USRWindow::HandleBoundVirtual(Void)
{
// 仮想領域が変更された場合に再計算が必要なものがあれば、ここに記述します。
return;
}
Void USRWindow::HandleRenderRequest(SFXGraphicsPtr graphics) const
{
// ウィンドウを描画します。
return;
}
|
Copyright (C) 2002 - 2009 Sophia Cradle Incorporated All Rights Reserved. |
![]() ![]() ![]()
|