TN031:控制条

备注

以下技术声明,则它在联机文档,首先包括了不更新。因此,某些过程和主题可能已过时或不正确。有关最新信息,建议您搜索议题在联机文档的索引。

此说明在 MFC 描述控制条类:常规 CControlBar、 CStatusBar、 CToolBar、 CDialogBar和 CDockBar

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

备注

使用一个 MFC 的派生类,如 CStatusBar,如果您创建 CControlBar派生类,而不是, CToolBarCDialogBar,需要设置 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 完成。

请参见

其他资源

由Number "技术说明

技术说明按类别