SophiaFramework UNIVERSE 5.3 |
コンテナとスクロールバーコントロールの連携について解説します。
コンテナのスクロールとスクロールバーコントロールを連携させることができます。
例 9.56. 宣言
SFMTYPEDEFRESPONDER(USRWindow)
class USRWindow: public SFZWindow {
SFMSEALRESPONDER(USRWindow)
SFMRESPONDERINSTANTIATEFOUR(USRWindow, SFZWindow, SFYContainer, SFYWidget, SFYResponder)
private:
SFZContainerSmp _container;
SFZContainerScrollBarControlSmp _bar;
// ...(省略)...
private:
SFCError Make(Void);
};
例 9.57. 実装
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) { // コンテナの背景色を薄赤色に設定する // ※コンテナの背景は SFYWidget::OnRenderRequest ハンドラによって描画される _container->SetBackgroundColor(SFXRGBColor(0xFF, 0xCC, 0xCC, 0x00)); // コンテナの実領域を設定する // ※ルートのローカル領域を (10, 10) だけ Deflate し、 // スクロールバーの幅の分だけ右側を小さくした領域に設定する rectangle.Set(GetLocalBound().Deflate(10, 10)); rectangle.SubWidth(9); _container->SetRealBound(rectangle); // コンテナの仮想領域を下に 100 ピクセルだけ拡張して設定する _container->SetVirtualBound(SFXRectangle(_container->GetVirtualBound()).AddBottom(100)); // コンテナの状態を「可視+活性+操作可能+フォーカス」にまとめて設定する _container->SetState(true, true, true, true); // コンテナ専用スクロールバーコントロールを作成する if ((_bar = SFZContainerScrollBarControl::NewInstance(&error)) != null) { // スクロールバーコントロールの親レスポンダを USRWindow に設定する error = _bar->SetParent(GetThis()); if (error == SFERR_NO_ERROR) { _bar->SetState(true, true, false, false); // スクロールバーコントロールの実領域を設定する rectangle.Set(_container->GetRealBound()); rectangle.SetLeft(rectangle.GetRight()); rectangle.SetWidth(9); _bar->SetRealBound(rectangle); // スクロールバーコントロールをコンテナに関連付ける _bar->Bind(_container); } } } } return error; }
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |