停靠的和浮动工具栏
Microsoft 基础类库支持可停靠工具栏。可停靠工具栏可以附加属性,或停靠,到其父窗口的任何一边也可以在自己的 mini-language 框架窗口可以分离或浮动,。本文在您的应用程序说明如何使用停靠工具栏。
如果您使用应用程序向导生成应用程序的主干,要求您选择希望停靠工具栏。默认情况下,应用程序向导生成在应用程序执行必要三个线程的活动放置可停靠工具栏的代码:
可以在框架窗口的停靠。
启用工具栏的停靠。
停靠工具栏 (到框架窗口。)。
如果这些步骤中的任一个缺少,则应用程序将显示标准工具栏。后两个步骤对应用程序中的每一个可停靠工具栏都必须执行。
本文中包含的其他主题包括:
浮动工具栏
动态调整工具栏
设置固定样式的工具栏的换行位置
有关示例参见 MFC 通用示例 DOCKTOOL 。
可以在框架窗口的停靠
若要工具栏停靠到框架窗口,必须对框架窗口 (或目标) 允许停靠。使用 CFrameWnd::EnableDocking 功能,则执行,其中一个 DWORD 参数是设置样式位指示框架窗口的哪一边接受停靠。如果工具栏将停靠,并具有多个边它可以停靠为,则该参数指示的一侧传递给 EnableDocking 用于将按以下顺序:顶部,底部,左侧,正确。如果您希望能够将控制条停靠在任意位置,请通过 CBRS_ALIGN_ANY 到 EnableDocking。
启用工具栏的停靠
在为目标为停靠、准备后,必须以相同的方式准备工具栏或 (源)。调用要停靠的每个工具栏的 CControlBar::EnableDocking ,指定工具栏应停靠的目标边。如果在对的调用中指定的边都为 CControlBar::EnableDocking 与启用的一侧为停靠在框架窗口,则工具栏无法停靠 —它将浮动。工具栏一旦浮动,将保持为浮动工具栏,不能停靠到框架窗口。
如果您想要的效果是一个永久浮动工具栏,调用带有参数数组的 EnableDocking 为 0。然后调用 CFrameWnd::FloatControlBar。工具栏保持浮点数,永久无法任何位置停靠。
停靠工具栏
框架调用 CFrameWnd::DockControlBar ,当用户尝试删除在授权停靠框架窗口时的一侧的工具栏。
此外,您可以随时调用此功能停靠控制条添加到框架窗口。这在初始化期间经常执行。多个工具栏可以停靠到框架窗口的特定端。
浮动工具栏
分离框架窗口的可停靠工具栏调用浮动工具栏。调用 CFrameWnd::FloatControlBar 执行此操作。指定工具栏将浮动,则应放置的点和定位对齐样式浮动工具栏是否是水平或垂直方向。
框架调用此功能,当用户拖动工具栏其停靠的位置和放置在停靠未启用的位置的。这可能是中的任意位置或在框架窗口外。与 DockControlBar,可以在初始化过程中调用此函数。
停靠工具栏的 MFC 实现不提供了支持可停靠工具栏的某些应用程序中的某些扩展功能。例如自定义项的工具栏中未提供的功能。
动态调整工具栏
基于 Visual C++ 4.0 版中,可以使它成为可以为应用程序的用户动态地调整浮动工具栏。通常情况下,工具栏具有长,线性形状,水平显示。但是,您可以更改工具栏的方向和其形状。例如,在中,当用户停靠一个工具栏一个框架窗口时的垂直端,形状更改为垂直布局。更改工具栏上的按钮多个行的矩形也是可能的。
您可以:
指定动态调整大小作为工具栏属性。
指定已修复大小作为工具栏属性。
若要提供此支持,有两个新工具栏样式在您调用 CToolBar::Create 成员函数。它们是:
CBRS_SIZE_DYNAMIC 控制条是动态的。
CBRS_SIZE_FIXED 控制条是固定的。
范围动态样式允许您的用户调整工具栏,则浮动时,但是,如果没有,在停靠时。工具栏 “包装”必需更改形状作为用户将其边缘。
该范围固定样式保留工具栏的换行状态,修复按钮的位置在每列。您的应用程序的用户不能更改工具栏的形状。工具栏包装在指定的位置,如分隔符的位置在按钮之间的。它所维护形状工具栏是停靠的还是浮动。所产生的效果是包含按钮的多个列的内置的调色板。
还可以使用 CToolBar::GetButtonStyle 返回一个状态和样式按钮的在工具栏上。按钮的样式确定按钮显示方式,以及如何响应用户输入;该状态通知按钮以指示所包装的状态。
设置固定样式的工具栏的换行位置
对大小固定样式的工具栏,工具栏将包装指定工具栏按钮索引。下面的代码演示如何执行此操作在您的主框架窗口的 OnCreate 重写:
// Get the style of the first button separator
UINT nStyle = m_wndToolBar.GetButtonStyle(3);
// Augment the state for wrapping
nStyle |= TBBS_WRAPPED;
m_wndToolBar.SetButtonStyle(3, nStyle);
// Do the same for other wrap locations ...
// Set the bar style to size fixed
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);
// Call docking/floating functions as needed ...
MFC 通用示例 DOCKTOOL 演示如何使用类 CControlBar 和 CToolBar 的成员函数管理工具栏的动态布局。DOCKTOOL 参见中的文件 EDITBAR.CPP。