停靠和浮动工具栏

Microsoft 基础类 (MFC) 库支持停靠工具栏。 可停靠工具栏可以被附加,或停靠到其父窗口的任何一边,或者可以通过在自己的要框窗口中被分离或浮动。 本文在应用程序演示如何使用停靠的工具栏。

如果使用应用程序向导生成应用程序的主干,会要求您选择是否希望停靠工具栏。 默认情况下,应用程序向导生成应用需要在程序执行三个操作中放置可停靠工具栏的代码:

  • 在框架窗口的停靠。

  • 启用工具栏的停靠。

  • (工具栏停靠到框架窗口。)。

如果以下任意步骤一个缺少,则应用程序将显示标准工具栏。 后两个步骤对应用程序中的每一个可停靠工具栏都必须执行。

本文包含的其他主题包括:

  • 浮动工具栏

  • 动态调整工具栏

  • 将固定样式的工具栏的位置

用于示例参见 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 演示如何使用类的成员管理函数 CToolBarCControlBar 和工具栏的动态布局。 DOCKTOOL 参见中的文件 EDITBAR.CPP。

您想进一步了解什么?

请参见

概念

MFC 工具栏实现