TN031:控制条
备注
以下技术声明,则它在联机文档,首先包括了不更新。因此,某些过程和主题可能已过时或不正确。有关最新信息,建议您搜索议题在联机文档的索引。
此说明在 MFC 描述控制条类:常规 CControlBar、 CStatusBar、 CToolBar、 CDialogBar和 CDockBar。
CControlBar
ControlBar 是 CWnd派生类中:
在框架窗口的顶部或底部对齐。
包含是基于 HWND 的控件的子项 (例如, CDialogBar如) 或非HWND 基本项 (, CToolBar, CStatusBar)。
控制条支持附加样式:
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 。
备注
使用一个 MFC 的派生类,如 CStatusBar,如果您创建 CControlBar派生类,而不是, CToolBar或 CDialogBar,需要设置 m_dwStyle 数据成员。这在 创建重写实现:
// CMyControlBar is derived from CControlBar
BOOL CMyControlBar::Create( CWnd* pParentWnd, DWORD dwStyle, UINT nID )
{
m_dwStyle = dwStyle;
.
.
.
}
控件条的布局算法
控件条的布局算法非常简单。 框架窗口发送消息 WM_SIZEPARENT 到控件条范围的所有子级。 与此消息时,对父的客户端矩形的指针传递。 此信息发送到 Z 顺序的子级。 控制棒子级使用此信息来确定自身并减少父的客户端区域的大小。 用于常规工作区的最终矩形 (小于控件条) 将保留用于确定主要客户端窗口 (通常是 MDI 客户端、视图或拆分窗口)。
有关详细信息 CWnd::RepositionBars 参见和 CFrameWnd::RecalcLayout 。
MFC 私有窗口消息,包括 WM_SIZEPARENT,在 技术说明 24文档。
CStatusBar
状态栏是具有文本输出窗格行的控制条。 有两种常用方法使用文本输出窗格:
作为消息行
(例如,标准菜单帮助消息行)。 这些由从 0 开始的通常获取标记
作为状态指示器
(例如,帽,数字和 SCRL 指示符)。 这些字符串由/命令 ID. 通常获取
状态栏的字体为 10 磅 MS Sans serif (按照 windows 界面应用程序的设计准则或 10 点瑞士比例字体的制图员最佳匹配)。 在窗口的某些版本,如日语编辑器中,字体选定不同。
在状态栏的颜色与 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) |
CCmdUI 为 CStatusBar 支持
指示器通常更新的方式是通过 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 提供的标准工具栏按钮 CLIPART 为示例。
在工具栏的颜色与 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 值 |
动态映射的颜色值 |
---|---|
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 的详细信息, 类库引用 的 CToolBar 。 ,在工具栏最初变得可见之前,工具栏的多数自定义应完成。
自定义 API 可用于调整按钮 ID,样式,并且,图像/标志符号的宽度分隔该按钮使用。 默认情况下不需要使用这些 API。
CCmdUI 为 CToolBar 支持
这种按钮总是更新的工具栏是通过 ON_UPDATE_COMMAND_UI 结构。 在空闲时间,工具栏将调用具有该按钮命令 ID 的 ON_UPDATE_COMMAND_UI 处理程序。 ON_UPDATE_COMMAND_UI 没有为分隔符调用,但是,它为普通按钮和复选框按钮调用。
ON_UPDATE_COMMAND_UI 处理程序可以调用:
启用:启用或禁用按钮。 对于普通按钮和复选框按钮同样正常工作。
SetCheck:将按钮的复选状态。 调用此工具栏按钮的使其成为复选框按钮。 SetCheck 采用大长度为 0 的参数 (未选中), 1 (选中) 或 2 (不确定)
SetRadio: SetCheck的简短。
复选框按钮为 “自动”复选框按钮;也就是说,当用户按它们将立即更改状态。 checked 丢弃或按下状态。 无内置用户界面模式更改一个按钮 “不确定的”状态;必须通过代码来执行此操作。
自定义 API 允许您更改特定工具栏按钮的状态,请最好是将 ON_UPDATE_COMMAND_UI 处理程序的这些状态工具栏按钮表示的命令。 请记住,空闲进程将更改工具栏按钮状态的 ON_UPDATE_COMMAND_UI 处理程序的,因此,在下空闲后对这些状态的所有更改通过 SetButtonStyle 会丢失的。
工具栏按钮将发送此规则按钮或菜单项的 WM_COMMAND 信息和由提供 ON_UPDATE_COMMAND_UI 处理程序的同一个类的一 ON_COMMAND 处理程序通常处理。
具有用于显示状态 (TBBS_ 值) 的四个工具栏按钮样式:
TBBS_CHECKED: 复选框当前已检查 (向下)。
TBBS_INDETERMINATE: 复选框当前是不确定的。
TBBS_DISABLED: 按钮当前禁用。
TBBS_PRESSED: 当前按下按钮。
六个正式 windows 界面应用程序的设计准则按钮样式通过以下 TBBS 值表示:
= 0
鼠标按下 TBBS_PRESSED (=|其他样式)
禁用 = TBBS_DISABLED
向下 = TBBS_CHECKED
下禁用 = TBBS_CHECKED|TBBS_DISABLED
不确定 = TBBS_INDETERMINATE
CDialogBar
对话栏是包含标准 windows 控件的控制条。 其行为与对话框因为它包含控件并支持 tab 键在它们之间。 它还象对话框因为它使用一个对话框模板表示该线条。
CDialogBar 对打印预览工具栏使用,后者包含标准按钮控件。
使用 CDialogBar 与使用 CFormView。 必须定义对话栏的一个对话框模板并移除除 WS_CHILD的所有样式。 请注意对话框不能是可见的。
CDialogBar 的控件通知将发送给控件条的父 (如工具栏按钮)。
CCmdUI 为 CDialogBar 支持
对话栏按钮应更新。 ON_UPDATE_COMMAND_UI 处理程序结构。 在空闲时间,对话栏将调用具有即具有 ID >= 0x8000 所有按钮的命令 ID 的 ON_UPDATE_COMMAND_UI 处理程序 (在命令 ID 范围之内)。
ON_UPDATE_COMMAND_UI 处理程序可以调用:
启用:启用或禁用按钮。
SetText:更改按钮的文本。
自定义可通过标准窗口管理器 API 完成。