TN031:控件条

备注

以下技术说明在首次包括在联机文档中后未更新。因此,某些过程和主题可能已过时或不正确。要获得最新信息,建议你在联机文档索引中搜索热点话题。

此注释在 MFC 控件条描述类:常规、CControlBarCStatusBarCToolBarCDialogBarCDockBar

CControlBar

ControlBarCWnd派生该类:

  • 在框架窗口的顶端或底端对齐。

  • 包含作为基于 HWND 的控件的子项 (例如,CDialogBar) 或HWND (例如非基本项,CToolBarCStatusBar)。

条控件支持的附加样式:

  • CBRS_TOP (默认) 固定到顶部的控件条。

  • 固定为CBRS_BOTTOM 底部的控件条。

  • 当父级调整时,CBRS_NOALIGN 不重新定位控件条。

CControlBar 派生的类提供更有趣的实现:

  • CStatusBar 一状态栏,项是包含文本的状态栏窗格。

  • CToolBar 一工具栏项运行对齐的位图按钮。

  • 包含标准 Windows 控件的CDialogBar 一与工具栏的帧 (从创建对话框模板资源。)

  • CDockBar 一种通用停靠其他 CControlBar 派生的对象中的区域。 特定成员函数和变量,此类更改可能在将来的版本。

任何控件条对象/窗口是子窗口的父框架窗口。 它们通常添加为一到框架的 MDI 工作区 (例如,客户或视图)。 一个子窗口的控件 ID 是重要的。 控件条默认布局具有 ID 的控件条。AFX_IDW_CONTROLBAR_FIRST 仅工作范围内设置为 AFX_IDW_CONTROLBAR_LAST。 请注意,即使具有范围条 256 控件 ID 之前,32 个控件条 ID 是特定的,因为它们由打印预览结构直接支持。

CControlBar 类将实现用于标准:

  • 对齐到顶部、底部或帧的任一端的控件条。

  • 分配控件项数组。

  • 支持派生类的实现。

当销毁 C++ 控件条,对象通常作为嵌入 CFrameWnd 派生的类成员并清理父 HWND 和对象。 如果需要分配堆的控件条对象,可以将 m_bAutoDestruct 成员到 TRUE 使控件条“delete this”,当销毁 HWND

备注

如果创建自己的 CControlBar派生类,而不是使用一个 MFC 的派生类,如 CStatusBarCToolBarCDialogBar,需要设置 m_dwStyle 数据成员。它会在 创建重写来执行:

// CMyControlBar is derived from CControlBar
BOOL CMyControlBar::Create( CWnd* pParentWnd, DWORD dwStyle, UINT nID )
{
   m_dwStyle = dwStyle;

   .
   .
   .
}

控件条布局算法

控件条的布局算法非常简单。 框架窗口发送 WM_SIZEPARENT 给控件条范围中的所有子级。 除了此消息一起,则对父的客户矩形的指针传递。 此信息发送给z 顺序的子类。 子控件使用这些信息确定自己和减小的父工作区的大小。 对于常规工作区的最后一个矩形 (小于控件条) 都保留用于客户确定主窗口 (通常 MDI、客户或拆分视图窗口)。

有关更多详细信息,请参见 CWnd::RepositionBarsCFrameWnd::RecalcLayout

私有 MFC Windows 消息,包括 WM_SIZEPARENT,在 技术说明 24文档。

CStatusBar

一状态栏是具有文本输出窗格行的控件条。 具有两种使用文本输出窗格的常见方法。:

  • 消息行作为

    (例如,标准菜单帮助消息行)。 这些由基于 0 的一般访问索引

  • 如状态指示器

    (例如,SCRL 帽,数字和指示符)。 这些由字符串/命令 ID 通常访问 .

状态栏的字体为 10 磅 MS Sans 舍里夫 (按照 Windows 界面应用程序设计指南或 10 磅瑞士比例字体的字体映射程序最佳匹配。) 在某些版本的 Windows,如日语汉字编辑,选定字体不同。

在状态栏的颜色与 Windows 界面应用程序设计指南的建议也保持一致。 这些颜色不硬编码并动态更改响应用户在控制面板的自定义。

Windows 颜色值。

RGB(默认)

状态栏背景

COLOR_BTNFACE

RGB(192, 192, 192)

状态栏文本

COLOR_BTNTEXT

RGB(000, 000, 000)

状态栏的上边缘或左边缘

COLOR_BTNHIGHLIGHT

RGB(255, 255, 255)

状态栏建立/右边缘

COLOR_BTNSHADOW

RGB(128, 128, 128)

CStatusBar 的 CCmdUI 支持

指示器通常更新的方法是通过 ON_UPDATE_COMMAND_UI 机制。 在空闲时间,状态栏指示符窗格将具有的字符串 ID 的 ON_UPDATE_COMMAND_UI 处理程序。

ON_UPDATE_COMMAND_UI 处理程序中调用:

  • 启用:启用或禁用"窗格。 一个完全相同一个启用的窗格,但禁用查找文本的窗格不可见 (即关闭文本指示)。

  • SetText:更改文本。 注意,如果要使用此窗格,因为不会自动调整大小。

有关创建自定义 CStatusBar 和 API 的信息,参考位于 类库引用的 类。CStatusBar 在初始状态栏,使之可见之前,状态栏的大多数自定义应完成。

状态栏才支持可伸长中,通常第一个窗格。 该窗格的大小是否确实为一个最小大小。 如果状态栏显示所有窗格大于的最小尺寸,任何多余的宽度将给定可以伸长的窗格。 因为第一个窗格伸长是可以的,具有状态栏的默认应用程序端,SCRL 具有数字和的右对齐状况指示器。

CToolBar

与工具栏分隔符可以包括位图按钮的行的控件条。 两个支持样式按钮:按钮和复选框按钮。 单选按钮组功能可以生成与复选框按钮和 ON_UPDATE_COMMAND_UI

在工具栏的所有位图按钮从位图中采用。 该位图必须包含图像或标志每个按钮的。 通常图像/字形的顺序在位图是它们在屏幕上绘制的顺序。(这可以更改自定义使用 API。)

每个按钮必须相同大小。 默认是标准 24x22 像素。 每个图像或标志必须相同大小,并且必须是并行在位图。 默认图像或标志符号大小是 16x15 像素。 因此,对于具有 10 个按钮的工具栏 (使用的标准尺寸),需要宽 160 像素、高 15 个像素的位图。

每个按钮都有且仅有图像或标志符号。 不同的按钮状态和样式 (例如,按,下,禁用,禁用下,而不确定) 算法从该图像/字形生成。 所有颜色位图或 DIB 可在理论。 如果原始图像是灰色,色度生成不同的按钮状态算法的性能最佳。 查看常规 MFC 示例和工具栏按钮剪贴画提供的标准工具栏按钮提供示例。CLIPART

在工具栏的颜色与 Windows 界面应用程序设计指南的建议也保持一致。 这些颜色不硬编码并动态更改响应用户在控制面板的自定义。

Windows 颜色值。

RGB(默认)

工具栏背景

COLOR_BTNFACE

RGB(192,192,192)

工具栏按钮顶部或左边缘

COLOR_BTNHIGHLIGHT

RGB(255,255,255)

工具栏按钮建立/右边缘

COLOR_BTNSHADOW

RGB(128,128,128)

此外,工具栏位图按钮 recolored,如同它们是标准 Windows 按钮控件。 如果位图从中加载资源和响应在系统颜色更改响应自定义用户在控制面板重新着色时,就发生。 在工具栏位图中的颜色 recolored 下自动,因此应谨慎地使用它们。 如果您不希望将 recolored 的位图的部分,请使用非常接近一个映射的 RGB 值的颜色。 映射基于准确的 RGB 值完成。

RGB value

动态映射颜色的值

RGB(000, 000, 000)

COLOR_BTNTEXT

RGB(128, 128, 128)

COLOR_BTNSHADOW

RGB(192, 192, 192)

COLOR_BTNFACE

RGB(255, 255, 255)

COLOR_BTNHIGHLIGHT

有关创建自定义 CToolBar 和 API 的信息,参考位于 类库引用的 类。CStatusBar 最初在工具栏显示出来之前,工具栏的大多数自定义应完成。

自定义 API 可用于调整按钮ID 样式,这样图像的宽度为标志符号/分隔哪些按钮使用。 默认情况下不需要使用这些 API。

CToolBar 的 CCmdUI 支持

工具栏按钮始终更新的方法是通过 ON_UPDATE_COMMAND_UI 机制。 在空闲时间,工具栏将该按钮的命令 ID 的 ON_UPDATE_COMMAND_UI 处理程序。 ON_UPDATE_COMMAND_UI 不对 Separator 调用,但对于按钮和复选框按钮调用。

ON_UPDATE_COMMAND_UI 处理程序中调用:

  • 启用:启用或禁用按钮。 对于按钮和复选框按钮同样正常工作。

  • SetCheck:检查将按钮的状态。 调用此按钮的工具栏将其转换为复选框按钮。 SetCheck 采用可以是 0 (未检查参数),1 (检查) 或 2 (不确定)

  • SetRadio: SetCheck的简短。

复选框按钮为“自动”复选框按钮;也就是说,当用户按它们会立即更改状态。 checked 是随后或按下的状态。 无内置用户界面模式更改按钮为“不确定”状态;必须浏览代码执行此操作。

自定义 API 允许您更改特定工具栏按钮的状态,您最好是将 ON_UPDATE_COMMAND_UI 处理程序调用这些状态工具栏按钮表示的命令。 记住,免处理将更改工具栏按钮的状态与 ON_UPDATE_COMMAND_UI 处理程序,因此,所有更改。通过 SetButtonStyle 做的这些状态可能会错过在下可用后。

工具栏按钮将发送常规按钮或菜单项的信息和 WM_COMMANDON_UPDATE_COMMAND_UI 提供处理程序的类相同的 ON_COMMAND 处理程序通常处理。

有用于显示状态 (TBBS_ 值) 的四个工具栏按钮的样式:

  • TBBS_CHECKED:   CheckBox 当前检查 (向下)。

  • TBBS_INDETERMINATE:   复选框是当前不确定的。

  • TBBS_DISABLED:   按钮当前禁用。

  • TBBS_PRESSED:   按钮当前按下。

个形 Windows 界面应用程序设计指南按钮样式,下面 TBBS 值表示形式:

  • Up = 0

  • Mouse Down = TBBS_PRESSED (| any other style)

  • Disabled = TBBS_DISABLED

  • Down = TBBS_CHECKED

  • Down Disabled = TBBS_CHECKED | TBBS_DISABLED

  • Indeterminate = TBBS_INDETERMINATE

CDialogBar

对话栏是包含标准 Windows 控件的控件条。 该作用类似于对话框因为它包含控件并支持 Tab 键在它们之间切换。 它也像对话框因为它使用一条表示对话框模板。

CDialogBar 提供打印预览,使用工具栏包含标准按钮控件。

使用 CDialogBar 与使用 CFormView。 必须定义对话栏的对话框模板并移除多余 WS_CHILD的任何样式。 注意对话框无法可见。

CDialogBar 控件通知能够发送给控件条的父级 (如工具栏按钮)。

CDialogBar 的 CCmdUI 支持

应该通过 ON_UPDATE_COMMAND_UI 处理程序机制更新对话栏按钮。 在空闲时间对话栏也就是说将具有 ID >为 0x8000 所有按钮的命令 ID 的 ON_UPDATE_COMMAND_UI 处理程序 (在命令 ID 范围内)。

ON_UPDATE_COMMAND_UI 处理程序中调用:

  • 启用:启用或禁用按钮。

  • SetText:将按钮的文本。

自定义可以在标准窗口管理器 API 完成。

请参见

其他资源

按编号列出的技术说明

按类别列出的技术说明