界面元素
本文档介绍了 Visual Studio 2008 SP1 中引入的界面元素,还介绍了与早期版本的库的差异。
下图显示了使用新界面元素生成的应用程序。
窗口停靠
窗口停靠功能类似于 Visual Studio 图形用户界面使用的窗口停靠。
控件条现在是窗格
控件条现在称为“窗格”,派生自 CBasePane 类。 在早期版本的 MFC 中,控件条的基类是 CControlBar
。
应用程序主框架窗口通常由 CFrameWndEx 类或 CMDIFrameWndEx 类表示。 主框架称为“停靠站点”。 窗格可以具有三种类型的父级之一:停靠站点、停靠栏或微型框窗口。
有两种类型的窗格:不可调整大小和可调整大小。 可以使用拆分器或滑块调整可调整大小的窗格的大小,例如状态栏和工具栏。 可调整大小的窗格可以形成容器(一个窗格可以停靠到另一个窗格,从而在两个窗格之间创建一个拆分器)。 但是,不能将可调整大小的窗格附加(停靠)到停靠栏。
如果应用程序使用的是不可调整大小的窗格,可以从 CPane 类派生它们。 如果应用程序使用的是可调整大小的窗格,可以从 CDockablePane 类派生它们
停靠站点
停靠站点(或主框架窗口)拥有一个应用程序中的所有窗格和微型框窗口。 停靠站点包含一个 CDockingManager 成员。 此成员维护属于停靠站点的所有窗格的列表。 列表的顺序如下:在停靠站点的外部边缘创建的窗格位于列表的开始位置。 当框架重新绘制停靠站点时,它会在此列表上循环,并调整每个窗格的布局,以包括停靠站点的当前边框。 当你必须调整停靠布局时,可以调用 AdjustDockingLayout
或 RecalcLayout
,框架会将此调用重定向到停靠管理器。
停靠栏
每个主框架窗口都可以沿其边框放置停靠栏。 停靠栏是属于 CDockSite 类的窗格。 停靠栏可以接受从 CPane 派生的对象,例如工具栏。 若要在初始化主框架窗口时创建停靠栏,可以调用 EnableDocking
。 若要启用自动隐藏栏,可以调用 EnableAutoHideBars
。 EnableAutoHideBars
会创建 CAutoHideDockSite 对象,并将这些对象放置在每个停靠栏旁边。
每个停靠栏被划分为若干个停靠行。 停靠行由 CDockingPanesRow 类表示。 每个停靠行都包含一个工具栏列表。 如果用户停靠工具栏,或将工具栏从一行移动到同一停靠栏中的另一行,框架要么创建一个新行并相应地调整停靠栏的大小,要么将工具栏放置在现有行上。
微型框窗口
浮动窗格驻留在微型框窗口中。 微型框窗口由两个类表示:CMDITabInfo 类(其中只能包含一个窗格)和 CMultiPaneFrameWnd 类(其中包含若干个窗格)。 若要在代码中浮动窗格,请调用 CBasePane::FloatPane。 窗格浮动后,框架会自动创建一个微型框窗口,该微型框窗口将成为浮动窗格的父窗格。 当浮动窗格停靠时,框架会重置其父窗格,浮动窗格将成为停靠栏(对于工具栏)或停靠站点(对于可调整大小的窗格)。
窗格分隔条
窗格分隔条(也称为滑块或拆分器)由 CPaneDivider 类表示。 当用户停靠窗格时,框架会创建窗格分隔条,无论窗格是停靠在停靠站点中还是停靠在另一个窗格上。 当窗格停靠到停靠站点时,窗格分隔条称为“默认窗格分隔条”。 默认窗格分隔条负责停靠站点中所有停靠窗格的布局。 停靠管理器维护默认窗格分隔条的列表和窗格的列表。 停靠管理器负责所有停靠窗格的布局。
容器
所有可调整大小的窗格在相互停靠时,都在容器中进行维护。 容器由 CPaneContainer 类表示。 每个容器都有指向其左窗格、右窗格、左子容器、右子容器的指针,以及左右部分之间的拆分器。 (左和右不是指物理上的两侧,而是标识树结构的分支。)通过这种方式,我们可以生成窗格和拆分器的树,从而实现可一起调整大小的窗格的复杂布局。 CPaneContainer
类维护容器的树;它还维护驻留在此树中的窗格和滑块的两个列表。 窗格容器管理器通常嵌入到默认滑块和带有多个窗格的微型框窗口中。
自动隐藏控件条
默认情况下,每个 CDockablePane
都支持自动隐藏功能。 当用户单击 CDockablePane
的标题上的固定按钮时,框架会将窗格切换到自动隐藏模式。 为了处理单击,框架将创建 CMFCAutoHideBar 类以及与 CMFCAutoHideBar
对象关联的 CMFCAutoHideButton 类。 框架将新的 CMFCAutoHideBar
放在 CAutoHideDockSite 上。 框架还将 CMFCAutoHideButton
附加到工具栏。 CDockingManager 类维护 CDockablePane
。
选项卡式控件条和 Outlook 栏
CMFCBaseTabCtrl 类使用可拆分的选项卡实现了选项卡式窗口的基本功能。 若要使用 CMFCBaseTabCtrl
对象,请在应用程序中初始化 CBaseTabbedPane 类。 CBaseTabbedPane
派生自 CDockablePane
并维护指向 CMFCBaseTabCtrl
对象的指针。 CBaseTabbedPane
使用户可以停靠选项卡式控件条并调整其大小。 使用 CDockablePane::AttachToTabWnd 可以动态创建已停靠的选项卡式控件条。
Outlook 栏控件同样基于选项卡式条。 CMFCOutlookBar 类派生自 CBaseTabbedPane
。 有关如何使用 Outlook 栏的详细信息,请参阅 CMFCOutlookBar 类。