演练:将控件放入工具栏

本主题介绍如何将包含一个 windows 控件到工具栏的工具栏按钮。 在 MFC 中,工具栏按钮必须是 CMFCToolBarButton 类派生类,如 CMFCToolBarComboBoxButton 类CMFCToolBarEditBoxButton 类CMFCDropDownToolbarButton 类CMFCToolBarMenuButton 类

将控件添加到工具栏

若要将控件添加到工具栏,请执行以下步骤:

  1. 保留虚拟资源 ID 在父工具栏资源的按钮。 有关如何创建按钮的更多信息可以使用工具栏在 Visual Studio 中编辑,请参见 工具栏编辑器 主题。

  2. 保留工具栏图像 (按钮图标) 在父工具栏的任意位图按钮的。

  3. 在处理 AFX_WM_RESETTOOLBAR 消息的消息处理程序,请执行以下操作:

    1. 构造按钮控件使用 CMFCToolbarButton派生类。

    2. 使用 CMFCToolBar::ReplaceButton,用新的控件替换虚假的按钮。 ,因为 ReplaceButton 复制按钮对象并维护该副本,可构造堆栈上的按钮对象。

备注

如果启用了应用程序的自定义项,则可能必须重新设置工具栏通过在 自定义 对话框的 工具栏 选项的 重置 按钮在重新编译后会在您的应用程序的更新控件。toolbar 状态在 windows 注册表中保存,并且,注册表信息加载并通过应用在应用程序启动过程后,,在 ReplaceButton 方法执行。

工具栏控件和自定义

自定义 对话框的 命令 选项卡包含可在整个应用程序命令的列表。 默认情况下, 自定义 对话框在每个菜单类处理应用程序菜单和生成标准工具栏按钮列表。 若要保留工具栏控件的扩展功能请提供,必须用 自定义 对话框的自定义控件替换标准工具栏按钮。

当您启用自定义项时,使用 CMFCToolBarsCustomizeDialog 类 类,可以在自定义处理程序 OnViewCustomize 创建 自定义 对话框。 在通过调用 CMFCToolBarsCustomizeDialog::Create显示 自定义 对话框之前,调用 CMFCToolBarsCustomizeDialog::ReplaceButton 使用新控件替换标准按钮。

示例:创建查找组合框

本节介绍如何创建显示在工具栏并包含最近使用的搜索字符串的 Find 组合框控件。 用户可以键入该控件的字符串然后按 enter 键搜索文档,或按 ESCAPE 键返回焦点到主框架。 此示例假定,文档在 CEditView 类派生的视图中突出显示。

Bb983718.collapse_all(zh-cn,VS.110).gif创建查找控件

首先,创建 Find 组合框控件:

  1. 添加按钮及其命令向应用程序资源:

    1. 在应用程序资源,添加具有 ID_EDIT_FIND 命令 ID 的新按钮向应用程序的工具栏和到任意位图与工具栏。

    2. 在 ID_EDIT_FIND 命令 ID. 创建新的菜单项

    3. 添加一个新字符串 “查找文本 \ nFind”到字符串表并将其分配 ID_EDIT_FIND_COMBO 命令 ID. 此 ID 将用作 Find 组合框按钮的命令 ID。

      备注

      由于 ID_EDIT_FINDCEditView处理的标准命令,不需要实现此命令的特殊处理程序。但是,您必须实现新命令的 ID_EDIT_FIND_COMBO处理程序。

  2. 创建一个新类, CFindComboBox,从派生 CComboBox 类

  3. 在 CFindComboBox 类,请重写 PreTranslateMessage 虚方法。 此方法将使组合框处理 WM_KEYDOWN 消息。 如果用户按 ESCAPE 键 (VK_ESCAPE),则返回焦点到主框架窗口。 如果用户按 enter 键 (VK_ENTER),请传递到主框架窗口包含 ID_EDIT_FIND_COMBO 命令 ID. 的 WM_COMMAND 消息

  4. 创建 Find 组合框按钮的类,从派生 CMFCToolBarComboBoxButton 类。 在本示例中,名为 CFindComboButton。

  5. CMFCToolbarComboBoxButton 构造函数采用三个参数:按钮、按钮图像索引和组合框的样式的命令 ID。 设置这些参数如下所示:

    1. 通过 ID_EDIT_FIND_COMBO 为命令 ID.

    2. 使用 CCommandManager::GetCmdImageID_EDIT_FIND 获取图像索引。

    3. 有关可用的组合框样式列表,请参见 组合框样式

  6. 在 CFindComboButton 类中,重写 CMFCToolbarComboBoxButton::CreateCombo 方法。 您应创建 CFindComboButton 对象并返回指向它。

  7. 使用 IMPLEMENT_SERIAL 宏使组合按钮不可变。 工作区管理器自动加载和保存在 windows 注册表中按钮的状态。

  8. 实现您的 ID_EDIT_FIND_COMBO 处理程序文档视图。 使用 CMFCToolBar::GetCommandButtonsID_EDIT_FIND_COMBO 检索所有 Find 组合框按钮。 由于自定义项,可以有一个按钮的多个副本具有相同的命令 ID 的。

  9. 在 ID_EDIT_FIND 消息处理程序 OnFind,使用 CMFCToolBar::IsLastCommandFromButton 确定查找命令是从 Find 组合框按钮发送了。 如果是这样,找到该文本并添加搜索字符串到组合框。

Bb983718.collapse_all(zh-cn,VS.110).gif查找控件添加到主工具栏

若要添加组合框按钮添加到工具栏,请执行以下步骤:

  1. 实现主框架窗口的 AFX_WM_RESETTOOLBAR 消息处理程序 OnToolbarReset 。

    备注

    框架将此信息添加到主框架窗口在应用程序启动期间,那么,当工具栏初始化,或者,在工具栏中自定义项时重新设置。在任一情况下,您必须具有自定义 Find 组合框按钮替换标准工具栏按钮。

  2. AFX_WM_RESETTOOLBAR 处理程序,请检查工具栏 ID,也就是说, AFX_WM_RESETTOOLBAR 消息的 WPARAM 。 如果工具栏 ID 与包含 Find 组合框按钮的是相等的工具栏,请调用 CMFCToolBar::ReplaceButton 替换 Find 按钮 (即具有命令 ID 的 ID_EDIT_FIND) 按钮与 CFindComboButton 对象。

    备注

    ,因为 ReplaceButton 复制按钮对象并维护其副本,您可以构建在堆栈上的 CFindComboBox 对象。

Bb983718.collapse_all(zh-cn,VS.110).gif添加查找控件绑定到自定义对话框

在自定义处理程序 OnViewCustomize,请调用 CMFCToolBarsCustomizeDialog::ReplaceButton 替换 Find 按钮 (即具有命令 ID 的 ID_EDIT_FIND) 按钮与 CFindComboButton 对象。

请参见

参考

层次结构图

CMFCToolBar 类

CMFCToolBarButton 类

CMFCToolBarComboBoxButton 类

CMFCToolBarsCustomizeDialog 类

其他资源

MFC 类