开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 12941|回复: 0

BCG MFC界面开发帮助文档:库结构(三)

[复制链接]

0

精华

8

贡献

1768

赞扬

特约版主

帖子
583
软币
4524
在线时间
275 小时
注册时间
2019-2-21
发表于 2020-10-15 09:45:44 | 显示全部楼层 |阅读模式
BCGControlBar ("Business Components Gallery ControlBar")是MFC扩展库,使您可以创建具有完全自定义选项(功能区、可自定义工具栏、菜单等)以及一组专业设计的丰富Microsoft Office和Microsoft Visual Studio的应用程序 GUI控件,例如图表、日历、网格、编辑器、甘特图和许多其他控件。
BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。

BCGControlBar Professional Edition for MFC(专业版)引入非基于MFC的对接体系结构,这意味着不再从CControlBar派生所有控件条,专业版本中所有控件栏的基类是CBCGPBaseControlBar(又从CBCGPWnd派生)。
专业版本体系结构的主要思想与MFC并没有太大区别,Pro版本与MFC(和BCGControlBar库标准版)高度兼容。
如何自定义应用程序操作的一些技巧
1. 您可以使用多种新样式的组合来创建新的控制栏:
  • CBRS_BCGP_FLOAT:使控制栏浮动
  • CBRS_BCGP_AUTOHIDE:启用自动隐藏模式
  • CBRS_BCGP_CLOSE:控制栏可以关闭(隐藏)
CBCGPBaseControlBar实现以下虚拟布尔方法来反映这些标志:CBCGPBaseControlBar::CanBeClosed, CBCGPBaseControlBar::CanAutoHide, CBCGPBaseControlBar::CanFloat,您可以在派生类中重写它们来自定义此行为。
2. 您可以通过重写CBCGPBaseControlBar::CanAcceptBar方法来自定义停靠操作,如果控制栏返回FALSE,则pBar不会停靠在该控制栏上。
3. 该库现在允许两种停靠模式:即时(在第一个Beta中可用 - 当拖动控制栏并与上下文对接时)和标准模式(当使用"drag rectangle"拖动并停靠控制栏时)。 停靠模式可以是BCGP_DOCK_TYPE :: DT_IMMEDIATE或BCGP_DOCK_TYPE :: BCGP_DT_STANDARD,由CBCGPDockManager::m_dockModeGlobal全局定义,您可以随时更改此变量,如果要控制各个控制栏的停靠模式,则可以覆盖 CBCGPBaseControlBar::GetDockMode ()。
4. 如果要创建一个无法浮动的"static"控制栏,并且无法在其之前停靠任何控制栏(例如BCGPOutlookDemo示例中的前景栏),则必须将其创建为非浮动并覆盖CBCGPBaseControlBar::DoesAllowDynInsertBefore方法返回FALSE。从版本6.01开始,如果创建的栏没有CBRS_BCGP_FLOAT样式,则默认实现返回FALSE。
5. Outlook栏的作用类似于常规的标签式控制栏,当您将一个控制栏停靠到另一个时,将根据创建第二个停靠控制栏时指定的以下样式来定义结果样式:
  • CBRS_BCGP_REGULAR_TABS:创建常规的标签式控制栏
  • CBRS_BCGP_OUTLOOK_TABS:创建Outlook样式的标签栏
CBCGPDockingControlBar具有SetTabbedControlBarRTC方法,您可以使用它来自定义控件栏,该控件栏将作为停靠到标签窗口的结果而创建。
6. 您可以将任何CWnd派生的控件插入到Outlook和标签式控制栏中,该库将使用CBCGPDockingCBWrapper 对象自动封装这些栏。这将允许从外观和标签控制栏中分离这些条,同时提供所需的对接操作。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禁用自动隐藏动画。

回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-12-27 11:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表