![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0 |
コンテナとスクロールバーコントロールの連携などについて解説します。
コンテナ内部の仮想領域のスクロール量と外部のスクロールバーコントロールなどを連携させることができます。
例 9.44. 宣言
SFMTYPEDEFRESPONDER(USRWindow)
class USRWindow : public SFZWindow {
SFMSEALRESPONDER(USRWindow)
SFMRESPONDERINSTANTIATEFOUR(USRWindow, SFZWindow, SFYContainer, SFYWidget, SFYResponder)
private:
SFZContainerSmp _container;
SFZScrollBarControlSmp _scrollbar;
...
private:
SFCError Make(Void);
// コンテナ用の実領域変更時のハンドラ
XANDLER_DECLARE_VOIDBOUND(OnBoundReal)
// コンテナ用の仮想領域変更時のハンドラ
XANDLER_DECLARE_VOIDBOUND(OnBoundVirtual)
};
例 9.45. 実装
SFCError USRWindow::Make(Void)
{
SFXRectangle rectangle;
SFCError error(SFERR_NO_ERROR);
// コンテナを作成する
if ((_container = SFZContainer::NewInstance(&error)) != null) {
// コンテナの親レスポンダを USRWindow に設定する
error = _container->SetParent(GetThis());
if (error == SFERR_NO_ERROR) {
// コンテナに実領域変更時のハンドラを登録する
error = _container->RegisterHandler(
SFXEventRange(SFEVT_RESPONDER_BOUND, SFEVT_RESPONDER_BOUND, SFP16_BOUND_REAL, SFP16_BOUND_REAL),
XANDLER_INTERNAL(OnBoundReal)
);
if (error == SFERR_NO_ERROR) {
// コンテナに仮想領域変更時のハンドラを登録する
error = _container->RegisterHandler(
SFXEventRange(SFEVT_RESPONDER_BOUND, SFEVT_RESPONDER_BOUND, SFP16_BOUND_VIRTUAL, SFP16_BOUND_VIRTUAL),
XANDLER_INTERNAL(OnBoundVirtual)
);
if (error == SFERR_NO_ERROR) {
// コンテナの背景色を薄赤色に設定する
// 背景色の描画は SFYWidget クラスが自動的に行ってくれる
_container->SetBackgroundColor(SFXRGBColor(0xFF, 0xCC, 0xCC, 0x00));
// コンテナの実領域を計算して設定する(スクロールバーの幅の分だけ右側を小さくしている)
rectangle.Set(GetLocalBound().Deflate(10, 10, 19, 10));
_container->SetRealBound(_container->GetSuitableBound(rectangle));
// コンテナの仮想領域を下に 100 ピクセルだけ拡張して設定する
_container->SetVirtualBound(SFXRectangle(_container->GetVirtualBound()).AddBottom(100));
// コンテナの状態を「可視+活性+操作可能+フォーカス」にまとめて設定する
_container->SetState(true, true, true, true);
// スクロールバーコントロールを作成する
if ((_scrollbar = SFZScrollBarControl::NewInstance(&error)) != null) {
// スクロールバーコントロールの親レスポンダを USRWindow に設定する
error = _scrollbar->SetParent(GetThis());
if (error == SFERR_NO_ERROR) {
_scrollbar->SetState(true, true, false, false);
// スクロールバーコントロールの実領域を計算して設定する
rectangle.Set(_container->GetRealBound());
rectangle.SetLeft(rectangle.GetRight());
rectangle.SetWidth(9);
_scrollbar->SetRealBound(_scrollbar->GetSuitableBound(rectangle));
// スクロールバーコントロールをコンテナに結びつける
_scrollbar->Bind(_container);
}
}
}
}
}
}
return error;
}
|
Copyright (C) 2002 - 2008 Sophia Cradle Incorporated All Rights Reserved. |
![]() ![]() ![]()
|