BCG框架

库框架

BCGControlBar库专业版(专业版)引入了非基于MFC的 可停靠架构。这意味着所有控制条都不必继承自CControlBar。Pro Version中所有控件栏的基类是CBCGPBaseControlBar(它又来自CBCGPWnd)。

专业版架构背后的主要思想与MFC没有太大区别。更重要的是,我们试图使Pro版本与MFC(和BCGControlBar Library Standard Edition)高度兼容。

您可以在下面看到使用Pro版本构建的应用程序的图片:

应用程序主框架窗口通常由CBCGPFrameWndCBCGPMDIFrameWnd表示。主框架称为“停靠 站点”。所有控制条可以有三种类型的父母:“停靠站点”,“停靠栏”或“小窗口窗口”。控制条可以分为两种通用类型:不可调整大小的控制条(例如状态栏和工具栏)和可调整大小的控制条。在“可调整大小”的控制条下,我们指的是可以通过分割器(或“滑块”)调整大小的条形,可以形成“容器”(一个控制条可以停靠到另一个控制条并在它们之间创建一个分离器)并且不能附着(停靠)到停靠栏。所有不可调整大小的控制条都应该来自CBCGPControlBarCBCGPDockingControlBar(此类实现停靠在dock站点的基本功能,放在容器中,成为自动隐藏等)。

停靠站点

主框架窗口或停靠站点是所有控制栏和miniframe窗口的所有者。它包含CBCGPDockManager类的成员( 停靠管理器)。停靠管理器维护属于停靠站点的所有控制条的列表。列表的排序方式是一句停靠站点创建的先后。当需要重新计算布局时,它会循环遍历此列表,将每个控制栏的布局调整为当前边界矩形(停靠站点)并减去控制栏区域。每次需要调整停靠布局时,您都可以调用mainframeclass :: AdjustDockingLayout或RecalcLayout,此调用将被重定向到停靠管理器。

停靠栏

每个主框架可以具有沿着边界放置的“停靠栏”(与边界对齐)。Dock bar是CBCGPDockBar类的控件栏。Dock栏可以接受CBCGPControlBar派生的对象(通常是工具栏)。应该在主框架窗口初始化期间通过调用mainframeclass :: EnableDocking(DWORD dwDockStyle)来创建停靠栏。如果要在主框架窗口的某些侧面启用“自动隐藏”栏,则应调用mainframe::EnableAutoHideBars(DWORD dwDockStyle)。此调用将在每个停靠栏旁边创建CBCGPAutoHideDockBar对象。您仍然可以使用CBRS_样式指定 停靠对齐。每个停靠栏都被划分(包含一个列表)到“停靠行”。Dock行由CBCGPDockBarRow表示类。每个停靠行包含一个工具栏列表。当工具栏停靠(例如,通过鼠标)或在同一个停靠站中从一行移动到另一行时,框架会创建一个新行并相应地调整停靠栏的大小或将工具栏放在现有行上。

Miniframe窗口

当控制栏浮动时,它位于miniframe窗口上。Miniframe窗口由两个类呈现:CBCGPMiniFrameWnd(可以只包含一个控制条)和CBCGPMultiMiniFrameWnd(可以包含多个控制条)。当控件栏浮动时,框架会自动创建一个miniframe窗口。 利用代码使控制栏浮动,可以调用CBCGPBaseControlBar :: FloatControlBar()。请注意,当控制栏变为浮动时,其父级会自动更改并设置为miniframe窗口。当控制栏停靠时,其父级将更改回停靠栏(用于工具栏)或停靠站点(用于可调整大小的控制栏)。

滑块

滑块(或分离器)由CBCGPSlider类表示。当停靠控制栏停靠在停靠站点或另一个控制栏上时,框架会自动创建滑块。当栏停靠到停靠站点时,新滑块称为“默认滑块”。它包含有关其调整大小的 停靠控制栏布局的所有信息。默认滑块放置在由停靠管理器维护的控制栏的常规列表中,并控制在“包含”停靠控制栏上执行的所有布局操作。

容器

所有可调整大小的控制条在彼此 停靠时都保持在“容器”中。容器由CBCGPBarContainer类表示。每个容器都有指向“左”栏,“右”栏,“左”子容器,“右”子容器和左右部分之间的分离器的指针。通过这种方式,我们可以构建一个由多个控制条和分割器构成的树,从而实现非常复杂的控制条布局,这些控制条可以一起调整大小。所述CBCGPBarContainerManager类维护容器(它包含一个指向根容器)的树。此外,它还维护了两个放置在此树中的控制条和滑块列表。

自动隐藏控制栏

每个 停靠控制栏自动启用“自动隐藏”功能。当用户单击位于停靠控制栏标题上的按钮按钮时,该栏将切换到自动隐藏模式。框架创建CBCGPAutoHideToolbar类型和一个新的按钮的一个新的工具栏CBCGPAutoHideButton类型,则以工具栏的自动隐藏停靠栏上(根据 当前跳的边界),高度自动隐藏按钮,工具栏和附加指针到停靠控制条到按钮。此时, 停靠控制栏被放置在由停靠管理器维护的特殊自动隐藏栏列表中。

选项卡式控制栏和外观栏

所述CBCGPBaseTabWnd类实现带有可拆卸标签窗口的基本功能。所述CBCGPBaseTabbedBar源自CBCGPDockingControlBar并保持一个指向CBCGPBaseTabWnd对象。通过这种方式,我们可以实现停靠和调整选项卡式控制栏的功能。使用CBCGPDockingControlBar :: AttachToTabWnd动态创建 停靠选项卡式控制栏。

Outlook栏控件也基于专业版中的选项卡栏(CBCGPOutlookBar派生自CBCGPBaseTabbedBar)。

一些提示如何自定义应用程序行为

  1. 您可以创建一个应用多种新样式组合的新控制栏:

    CBCGPBaseControlBar实现下列虚拟bool方法,以反映这些标志:CBCGPBaseControlBar :: CanBeClosedCBCGPBaseControlBar :: CanAutoHideCBCGPBaseControlBar :: CanFloat。您可以在派生类中覆盖它们以自定义此行为。

    • CBRS_BCGP_FLOAT:使控制栏浮动
    • CBRS_BCGP_AUTOHIDE:启用自动隐藏模式
    • CBRS_BCGP_CLOSE:控制栏可以关闭(隐藏)
  2. 您可以通过重写CBCGPBaseControlBar :: CanAcceptBar方法来自定义停靠行为。如果控制条返回FALSE,则pBar将不会停靠在此控制栏上。
  3. 该库现在允许两种 停靠模式:立即(在第一个测试版中可用 - 当控制栏被上下文拖动和停靠时)和标准(当使用“拖动矩形”拖动和停靠控制栏时)。停靠模式可以是BCGP_DOCK_TYPE :: DT_IMMEDIATE或BCGP_DOCK_TYPE :: BCGP_DT_STANDARD,它由CBCGPDockManager :: m_dockModeGlobal全局定义。您可以随时更改此变量。如果要控制单个控制栏的停靠模式,可以覆盖BCGP_DOCK_TYPE CBCGPBaseControlBar :: GetDockMode()。
  4. 如果你想创建一个无法浮动的“静态”控制条,并且不能在它之前停靠任何控制条(如BCGPOutlookDemo示例中的outlook栏),则必须将其创建为非浮动并覆盖CBCGPBaseControlBar :: DoesAllowDynInsertBefore方法返回FALSE。从版本6.01开始,如果已创建没有CBRS_BCGP_FLOAT样式的栏,则默认实现返回FALSE。
  5. Outlook栏表现为常规选项卡式控制栏。将一个控制栏停靠到另一个控制栏时,将根据创建第二个停靠控制栏时指定的以下样式定义结果样式:

    CBCGPDockingControlBar具有SetTabbedControlBarRTC方法。您可以使用它来自定义由于停靠到选项卡窗口而创建的控制栏。

    • CBRS_BCGP_REGULAR_TABS:创建常规选项卡式控制栏
    • CBRS_BCGP_OUTLOOK_TABS:创建outlook样式的标签栏
  6. 您可以将任何CWnd派生的控件插入到Outlook和选项卡式控件栏中。该库将使用CBCGPDockingCBWrapper对象自动包装这些条。这将允许从outlook和选项卡式控制条中分离这些条,同时提供所需的 停靠行为。CBCGPBaseTabWnd(用作选项卡窗口和Outlook窗口的基类)具有SetDockingBarWrapperRTC方法,使您可以自定义包装外观和行为。将CBCGPBaseTabWnd :: m_bEnableWrapping设置为FALSE以禁用此功能。请注意,当控制条被包裹时,其直接父级设置为虚拟 停靠控制条,然后将其插入选项卡窗口。。
  7. 如果要将选项卡添加为不可分离,可以调用CBCGPBaseTabWnd :: AddTab并将bDetachable设置为FALSE或调用CBCGPBaseTabWnd :: EnableTabDetach
  8. 如果要启用/禁用选项卡交换,请调用CBCGPBaseTabWnd :: EnableTabSwap
  9. 强烈建议创建ID不同于-1的所有控制条。
  10. 如果在初始停靠布局中进行任何更改,则必须清除应用程序注册表项以查看更改(如果应用程序将停靠状态保存到注册表)。
  11. 如果启用可拆卸选项卡,则可以动态创建和销毁选项卡式窗口,不保存指向动态选项卡式窗口的指针。
  12. 如果为两个非选项卡式控制栏调用CBCGPDockingControlBar :: AttachToTabWnd,将使用最后一个参数ppTabbedControlBar返回指向选项卡窗口的指针。您可以使用它继续向新创建的选项卡式窗口添加选项卡(或用于其他操作)。
  13. 如果要将一个停靠控制栏停靠到任何对齐的另一个停靠控制栏,可以调用CBCGPDockingControlBar :: DockToWindow。此时原始控制栏必须停靠在某处。对于工具栏,您仍然可以使用CBCGPFrameWnd :: DockControlBarLeftOf
  14. ShowControlBar方法有第三个非默认参数bActivate,因此某些现有代码可能无法编译。
  15. CBCGPDockingControlBar :: m_bHideInAutoHideMode是一个新的静态成员,它控制当您调用CBCGPFrameWnd :: ShowControlBar时 停靠控制栏在自动隐藏模式下的行为方式。如果此变量设置为TRUE,则将隐藏控制栏及其自动隐藏按钮。否则,控制条将滑入/滑出。
  16. 不要使用GetStyle()和WS_VISIBLE来确定控制栏的可见性。请改用CBCGPBaseControlBar :: IsVisible,因为它正确处理选项卡/自动隐藏模式下的可见性状态。
  17. 如果要创建非浮动,不可调整大小的控制栏,则不应调用DockControlBar。你必须调用CBCGPDockManager :: AddControlBar(CBCGPControlBar * pNonFloatingBar,...)。此调用将使用停靠管理器注册此控制栏,此栏将参与停靠布局。
  18. 如果要创建非浮动可调整大小的控件栏,则应该使用CBRS_BCGP_FLOAT样式创建它并调用DockControlBar(CBCGPDockingControlBar * pResizableBar)。
  19. 如果要从停靠布局中排除控制栏,请从停靠栏中删除工具栏,依此类推,您必须调用CBCGPBaseControlBar :: UnDockControlBar。您不应该在自动隐藏模式下为控制条调用此方法,或者在选项卡式窗口的选项卡中调用控制条。
  20. 如果控制栏已设置为自动隐藏模式,则必须在调用CBCGPBaseControlBar :: FloatControlBarCBCGPBaseControlBar :: UnDockControlBar之前调用SetAutoHideMode(FALSE,...)。
  21. 您可以使用CBCGPDockingControlBar :: m_bDisableAnimation禁用自动隐藏动画。

​​​​​​​返回目录​​​​​​​

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值