CMFCDropDownToolbarButton 类

一种工具栏按钮,单击时其行为类似于常规按钮。 但是,如果用户按住工具栏按钮,它会打开一个下拉工具栏(CMFCDropDownToolBar 类)。

语法

class CMFCDropDownToolbarButton : public CMFCToolBarButton

成员

公共构造函数

名称 描述
CMFCDropDownToolbarButton::CMFCDropDownToolbarButton 构造 CMFCDropDownToolbarButton 对象。
CMFCDropDownToolbarButton::~CMFCDropDownToolbarButton 析构函数。

公共方法

名称 描述
CMFCDropDownToolbarButton::CopyFrom 将另一个工具栏按钮的属性复制到当前按钮。 (替代 CMFCToolBarButton::CopyFrom。)
CMFCDropDownToolbarButton::CreateObject 由框架用于创建此类类型的动态实例。
CMFCDropDownToolbarButton::DropDownToolbar 打开下拉工具栏。
CMFCDropDownToolbarButton::ExportToMenuButton 将文本从工具栏按钮复制到菜单。 (替代 CMFCToolBarButton::ExportToMenuButton。)
CMFCDropDownToolbarButton::GetDropDownToolBar 检索关联该按钮的下拉工具栏。
CMFCDropDownToolbarButton::GetThisClass 由框架用于获取指向与此类类型关联的 CRuntimeClass 对象的指针。
CMFCDropDownToolbarButton::IsDropDown 确定下拉工具栏目前是否打开。
CMFCDropDownToolbarButton::IsExtraSize 确定是否可以使用扩展边框显示按钮。 (替代 CMFCToolBarButton::IsExtraSize。)
CMFCDropDownToolbarButton::OnCalculateSize 由框架调用,以计算指定设备上下文和停靠状态的按钮大小。 (替代 CMFCToolBarButton::OnCalculateSize。)
CMFCDropDownToolbarButton::OnCancelMode 由框架调用,用于处理 WM_CANCELMODE 消息。 (替代 CMCToolBarButton::OnCancelMode。)
CMFCDropDownToolbarButton::OnChangeParentWnd 当按钮插入新工具栏时由框架调用。 (替代 CMFCToolBarButton::OnChangeParentWnd。)
CMFCDropDownToolbarButton::OnClick 当用户单击鼠标按钮时由框架调用。 (替代 CMFCToolBarButton::OnClick。)
CMFCDropDownToolbarButton::OnClickUp 当用户释放鼠标按钮时由框架调用。 (替代 CMFCToolBarButton::OnClickUp。)
CMFCDropDownToolbarButton::OnContextHelp 当父工具栏处理 WM_HELPHITTEST 消息时由框架调用。 (替代 CMFCToolBarButton::OnContextHelp。)
CMFCDropDownToolbarButton::OnCustomizeMenu 当应用程序在父工具栏上显示快捷菜单时,修改提供的菜单。 (替代 CMFCToolBarButton::OnCustomizeMenu。)
CMFCDropDownToolbarButton::OnDraw 由框架调用,用于使用指定的样式和选项绘制按钮。 (替代 CMFCToolBarButton::OnDraw。)
CMFCDropDownToolbarButton::OnDrawOnCustomizeList 由框架调用,用于在“自定义”对话框的“命令”窗格中绘制按钮。 (替代 CMFCToolBarButton::OnDrawOnCustomizeList。)
CMFCDropDownToolbarButton::Serialize 从存档中读取此对象或将其写入存档。 (替代 CMFCToolBarButton::Serialize。)
CMFCDropDownToolbarButton::SetDefaultCommand 当用户单击按钮时,设置框架使用的默认命令。

数据成员

名称 描述
CMFCDropDownToolbarButton::m_uiShowBarDelay 指定用户在出现下拉工具栏之前必须按住鼠标按钮的时间长度。

注解

不同于普通按钮,CMFCDropDownToolBarButton在按钮的右下角有一个小箭头。 用户从下拉工具栏中选择一个按钮后,框架会在顶层工具栏按钮上显示其图标(右下角带有小箭头的按钮)。

有关如何实现下拉工具栏的详细信息,请参阅 CMFCDropDownToolBar 类

CMFCDropDownToolBarButton 对象可以导出到 CMFCToolBarMenuButton 类对象,并显示为带有弹出菜单的菜单按钮。

继承层次结构

CObject

CMFCToolBarButton

CMFCDropDownToolbarButton

要求

标头: afxdropdowntoolbar.h

CMFCDropDownToolbarButton::CopyFrom

将另一个工具栏按钮的属性复制到当前按钮。

virtual void CopyFrom(const CMFCToolBarButton& src);

参数

src
[in] 对要从中复制的源按钮的引用。

注解

调用此方法,将另一个工具栏按钮复制到此工具栏按钮。 “src”的类型必须为 CMFCDropDownToolbarButton

CMFCDropDownToolbarButton::CMFCDropDownToolbarButton

构造 CMFCDropDownToolbarButton 对象。

CMFCDropDownToolbarButton();

CMFCDropDownToolbarButton(
    LPCTSTR lpszName,
    CMFCDropDownToolBar* pToolBar);

参数

lpszName
[in] 按钮的默认文本。

pToolBar
[in] 当用户按下按钮时,显示指向 CMFCDropDownToolBar 对象的指针。

备注

构造函数的第二次重载将“pToolBar”指定的工具栏中的第一个按钮复制到下拉按钮

通常,下拉工具栏按钮使用“pToolBar”指定的工具栏中最近使用的按钮中的文本。 当按钮转换为菜单按钮或显示在“自定义”对话框的“命令”选项卡时,它使用“lpszName”指定的文本。 有关自定义对话框的详细信息,请参阅 CMFCToolBarsCustomizeDialog 类

示例

以下示例演示如何构造 CMFCDropDownToolbarButton 类的对象。 此代码片段是 Visual Studio 演示示例的一部分。

// Add dropdown resources button
// CMFCToolBarsCustomizeDialog* pDlgCust
// CMFCDropDownToolBar m_wndToolbarResource
pDlgCust->AddButton(_T("Build"), CMFCDropDownToolbarButton(_T("Add Resource"), &m_wndToolbarResource));

打开下拉工具栏。

BOOL DropDownToolbar(CWnd* pWnd);

参数

pWnd
[in] 下拉框架的父窗口,或 NULL使用下拉工具栏按钮的父窗口。

返回值

如果此方法成功,返回值为非零;否则返回值是 0。

备注

CMFCDropDownToolbarButton::OnClick 方法调用此方法,在用户按住工具栏按钮时打开下拉工具栏。

此方法使用 CMFCDropDownFrame::Create 方法创建下拉工具栏。 如果父工具栏垂直停靠,此方法将下拉工具栏定位在父工具栏的左侧或右侧,具体取决于适合度。 否则,此方法将下拉工具栏定位在父工具栏下方。

如果“pWnd”为 NULL 且下拉工具栏按钮没有父窗口,此方法失败

CMFCDropDownToolbarButton::ExportToMenuButton

将文本从工具栏按钮复制到菜单。

virtual BOOL ExportToMenuButton(CMFCToolBarMenuButton& menuButton) const;

参数

menuButton
[in] 对目标菜单按钮的引用。

返回值

如果该方法成功,则为非零;否则为零。

注解

此方法调用基类实现 (CMFCToolBarButton::ExportToMenuButton),然后将包含此按钮中每个工具栏菜单项的弹出菜单附加到目标菜单按钮。 此方法不会将子菜单附加到弹出菜单。

如果父工具栏 m_pToolBar 为 NULL 或基类实现返回 FALSE,此方法失败。

CMFCDropDownToolbarButton::GetDropDownToolBar

检索关联该按钮的下拉工具栏。

CMFCToolBar* GetDropDownToolBar() const;

返回值

关联该按钮的下拉工具栏。

注解

此方法返回 m_pToolBar 数据成员。

CMFCDropDownToolbarButton::IsDropDown

确定下拉工具栏目前是否打开。

BOOL IsDropDown() const;

返回值

如果下拉列表工具栏目前处于打开状态,返回值为非零;否则返回值为 0。

注解

该框架使用 CMFCDropDownToolbarButton::DropDownToolbar 方法打开下拉工具栏。 当用户在下拉工具栏的非客户端区域按下鼠标左键时,框架关闭下拉工具栏。

CMFCDropDownToolbarButton::IsExtraSize

确定是否可以使用扩展边框显示按钮。

virtual BOOL IsExtraSize() const;

返回值

如果工具栏按钮可以用扩展边框显示,返回值为非零;否则返回值为 0。

注解

有关扩展边框的详细信息,请参阅 CMFCToolBarButton::IsExtraSize

CMFCDropDownToolbarButton::m_uiShowBarDelay

指定用户在出现下拉工具栏之前必须按住鼠标按钮的时间长度。

static UINT m_uiShowBarDelay;

注解

延迟时间以毫秒为单位。 默认值为 500。 可以通过更改此共享数据成员的值来设置另一个延迟。

CMFCDropDownToolbarButton::OnCalculateSize

由框架调用,以计算指定设备上下文和停靠状态的按钮大小。

virtual SIZE OnCalculateSize(
    CDC* pDC,
    const CSize& sizeDefault,
    BOOL bHorz);

参数

pDC
[in] 显示按钮的设备上下文。

sizeDefault
[in] 按钮的默认大小。

bHorz
[in] 父工具栏的停靠状态。 如果工具栏水平停靠或浮动,此参数为 TRUE;如果工具栏垂直停靠,则为 FALSE。

返回值

包含按钮维度的 SIZE 结构(以像素为单位)。

备注

此方法通过将下拉箭头的宽度添加到按钮大小的水平维度来扩展基类实现 (CMFCToolBarButton::OnCalculateSize)。

CMFCDropDownToolbarButton::OnChangeParentWnd

当按钮插入新工具栏时由框架调用。

virtual void OnChangeParentWnd(CWnd* pWndParent);

参数

pWndParent
[in] 新的父窗口。

备注

此方法通过清除文本标签 (CMFCToolBarButton::m_strText) 并将 CMFCToolBarButton::m_bTextCMFCToolBarButton::m_bUserButton 数据成员设置为 FALSE,以替代基类实现 (CMFCToolBarButton::OnChangeParentWnd)。

CMFCDropDownToolbarButton::OnClick

当用户单击鼠标按钮时由框架调用。

virtual BOOL OnClick(
    CWnd* pWnd,
    BOOL bDelay = TRUE);

参数

pWnd
[in] 工具栏按钮的父窗口。

bDelay
[in] 如果消息应以延迟处理,则为 TRUE。

返回值

如果按钮处理单击消息,返回值为非零;否则返回值为 0。

注解

此方法通过更新下拉工具栏的状态来扩展基类实现 CMFCToolBarButton::OnClick

当用户单击工具栏按钮时,此方法会创建一个计时器,该计时器等待 CMFCDropDownToolbarButton::m_uiShowBarDelay 数据成员指定的时间长度,然后使用 CMFCDropDownToolbarButton::DropDownToolbar 方法打开下拉工具栏。 此方法在用户第二次单击工具栏按钮时关闭下拉工具栏。

CMFCDropDownToolbarButton::OnClickUp

当用户释放鼠标按钮时由框架调用。

virtual BOOL OnClickUp();

返回值

如果按钮处理单击消息,返回值为非零;否则返回值为 0。

注解

此方法通过更新下拉工具栏状态来扩展基类实现 CMFCToolBarButton::OnClickUp

如果下拉工具栏计时器处于活动状态,此方法将停止该计时器。 如果计时器处于打开状态,该方法将关闭下拉工具栏。

有关下拉工具栏和下拉工具栏计数器的详细信息,请参阅 CMFCDropDownToolbarButton::OnClick

CMFCDropDownToolbarButton::OnContextHelp

当父工具栏处理 WM_HELPHITTEST 消息时由框架调用。

virtual BOOL OnContextHelp(CWnd* pWnd);

参数

pWnd
[in] 工具栏按钮的父窗口。

返回值

如果按钮处理帮助消息,返回值为非零;否则返回值为 0。

注解

此方法通过调用 CMFCDropDownToolbarButton::OnClick 方法并将“bDelay”设置为 FALSE 来扩展基类实现 (CMFCToolBarButton::OnContextHelp)。 此方法返回由 CMFCDropDownToolbarButton::OnClick 返回的值。

有关 WM_HELPHITTEST 消息的详细信息,请参阅 TN028:上下文关联帮助支持

CMFCDropDownToolbarButton::OnCustomizeMenu

当应用程序在父工具栏上显示快捷菜单时,修改提供的菜单。

virtual BOOL OnCustomizeMenu(CMenu* pMenu);

参数

pMenu
[in] 要自定义的菜单。

返回值

该方法返回 TRUE。

备注

此方法通过禁用以下菜单项来扩展基类实现 (CMFCToolBarButton::OnCustomizeMenu):

  • 复制按钮图像

  • 按钮外观

  • 图像

  • 文本

  • 图像和文本

替代此方法以修改框架在自定义模式下显示的快捷菜单。

CMFCDropDownToolbarButton::OnDraw

由框架调用,用于使用指定的样式和选项绘制按钮。

virtual void OnDraw(
    CDC* pDC,
    const CRect& rect,
    CMFCToolBarImages* pImages,
    BOOL bHorz = TRUE,
    BOOL bCustomizeMode = FALSE,
    BOOL bHighlight = FALSE,
    BOOL bDrawBorder = TRUE,
    BOOL bGrayDisabledButtons = TRUE);

参数

pDC
[in] 显示按钮的设备上下文。

rect
[in] 按钮的范围框。

pImages
[in] 关联按钮的工具栏图像集合。

bHorz
[in] 父工具栏的停靠状态。 当按钮水平停靠时,此参数为 TRUE,当按钮垂直停靠时,此参数为 FALSE。

bCustomizeMode
[in] 指定工具栏是否处于自定义模式。 当工具栏处于自定义模式时,此参数为 TRUE,当工具栏未处于自定义模式时,此参数为 FALSE。

bHighlight
[in] 指定是否突出显示按钮。 当按钮突出显示时,此参数为 TRUE,当按钮未突出显示时,此参数为 FALSE。

bDrawBorder
[in] 指定按钮是否应显示其边框。 当按钮应显示其边框时,此参数为 TRUE,当按钮不应显示其边框时,此参数为 FALSE。

bGrayDisabledButtons
[in] 指定是对禁用的按钮进行阴影处理还是使用禁用的图像集合。 如果应对禁用的按钮进行阴影处理,则此参数为 TRUE,如果此方法应使用禁用的图像集合,则为 FALSE。

备注

替代此方法来自定义工具栏按钮绘图。

CMFCDropDownToolbarButton::OnDrawOnCustomizeList

由框架调用,用于在“自定义”对话框的“命令”窗格中绘制按钮

virtual int OnDrawOnCustomizeList(
    CDC* pDC,
    const CRect& rect,
    BOOL bSelected);

参数

pDC
[in] 显示按钮的设备上下文。

rect
[in] 按钮的范围框。

bSelected
[in] 是否选择该按钮。 如果此参数为 TRUE,则选择该按钮。 如果此参数为 FALSE,则不选择该按钮。

返回值

指定设备上下文上按钮的宽度(以像素为单位)。

备注

当需要按钮在所有者绘制列表框中显示自身时,“自定义”对话框(“命令”选项卡)调用此方法

此方法通过将按钮的文本标签更改为按钮的名称(即传递给构造函数的“lpszName”参数的值)来扩展基类实现 (CMFCToolBarButton::OnDrawOnCustomizeList)

CMFCDropDownToolbarButton::Serialize

从存档中读取此对象或将其写入存档。

virtual void Serialize(CArchive& ar);

参数

ar
[in] 要从其进行序列化或要序列化为的 CArchive 对象。

备注

此方法通过序列化父工具栏的资源 ID 来扩展基类实现 (CMFCToolBarButton::Serialize)。 加载存档时(CArchive::IsLoading 返回非零值),此方法将 m_pToolBar 数据成员设置为包含序列化资源 ID 的工具栏。

CMFCDropDownToolbarButton::SetDefaultCommand

当用户单击按钮时,设置框架使用的默认命令。

void SetDefaultCommand(UINT uiCmd);

参数

uiCmd
[in] 默认命令的 ID。

备注

调用此方法以指定框架在用户单击按钮时执行的默认命令。 具有“uiCmd”指定的命令 ID 的项必须位于父下拉工具栏中

另请参阅

层次结构图

CMFCDropDownToolBar 类
CMFCToolBar 类
CMFCToolBarMenuButton 类
演练:将控件置于工具栏上