如何实现工具栏的下拉箭头按钮

论坛中有人曾经问过这样的问题:如何在C++/MFC程序中实现类似IE工具栏中带下拉箭头的按钮,如图一所示:

图一 IE工具栏中带下拉箭头的按钮

本文将告诉你如何实现,方法其实很简单:

1、新建一个MFC/SDI工程,一路都取默认的设置。

2、在mainframe.cpp文件中找到 CMainFrame::OnCreate()框架窗口创建函数。在末尾添加如下代码行:

DWORD dwExStyle = TBSTYLE_EX_DRAWDDARROWS;
   m_wndToolBar.GetToolBarCtrl().SendMessage(TB_SETEXTENDEDSTYLE, 0, (LPARAM)dwExStyle);

这两行代码的作用是让工具栏具有处理下拉箭头的能力,接着要用SetButtonStyle()方法在选定的地方添加下拉箭头按钮,在例子程序里,下拉箭头按钮是加在了文件打开菜单上:

DWORD dwStyle = m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN));
   dwStyle |= TBSTYLE_DROPDOWN;
   m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN), dwStyle);

加了上述代码行之后,编译一次程序,然后运行程序,你就可以看到下拉箭头了。但此时还不能操作。

3、接下来要做的事情是添加下拉箭头的消息处理代码以及程序要用的菜单资源。现在假设你已经创建了菜单资源,且假设这个菜单的资源ID是IDR_MENU1。如图二所示。

图二 新创建的菜单资源IDR_MENU1

在CMainFrame类的消息映射中加入下拉箭头的TBN_DROPDOWN消息映射:

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
    //{{AFX_MSG_MAP(CMainFrame)
    ...
    ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnToolbarDropDown)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()

4、在MainFrame.h头文件中加入消息处理函数的声明:

//{{AFX_MSG(CMainFrame)
    ...
    afx_msg void OnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes);
    //}}AFX_MSG

时间: 2024-12-28 00:38:25

如何实现工具栏的下拉箭头按钮的相关文章

能不能在DropDownList右侧下拉箭头左侧增加一个图片按钮?

问题描述 我想在DropDownList右侧下拉箭头左侧增加一个图片按钮,用来对里面的项进行编辑和删除,有没有办法实现呢?请高手指教! 解决方案 解决方案二:AjaxDropDownExtender控件不知道能不能达到要的效果!解决方案三:我觉得还是自己做个这样的控件好,需要什么功能就加什么功能,用自定义控件吧

Excel2010数据有效性下拉箭头如何恢复

  1.打开Excel,点击工具栏的"文件"→"选项" 2.在Excel选项里选择"高级",在高级里找到"此工作簿的显示选项",将"对于对象显示"改为全部然后点击确定. 3.返回Excel表格接着点击工具栏的"数据"→"数据有效性" 列表"> 4.在数据有效性里将有效性条件改为序列然后勾选"提供下拉箭头"最后点击确认. 5.返回表格

combobox怎么在失去焦点的时候不显示下拉箭头

问题描述 combobox怎么在失去焦点的时候不显示下拉箭头 combobox怎么在失去焦点的时候不显示下拉箭头?怎么在获得焦点的时候才显示下拉的箭头和按钮? 解决方案 combobox 写个失去焦点事件,用个DIV将combobox包起来,写个css,DIV的width比combobox小30px,调用就行了,再写个获得焦点的事件,将DIV的width加上30px

用jQuery模拟select下拉框的简单示例代码

 本篇文章主要是对用jQuery模拟select下拉框的简单示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 很多时候,美工会觉得默认的select下拉框很难看(特别是右侧的下拉箭头按钮),他们通常喜欢用一个自定义的图标来代替这个按钮.这样就只能用 js + div 来模拟了,倒腾了一番,用jQuery模拟了下,当然网上这种文章也不少,只是懒得去看找  代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transition

用jQuery模拟select下拉框

很多时候,美工会觉得默认的select下拉框很难看(特别是右侧的下拉箭头按钮),他们通常喜欢用一个自定义的图标来代替这个按钮.这样就只能用 js + div 来模拟了,倒腾了一番,用jQuery模拟了下,当然网上这种文章也不少,只是懒得去看找,又重新发明轮子鸟:) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-t

用jQuery模拟select下拉框的简单示例代码_jquery

很多时候,美工会觉得默认的select下拉框很难看(特别是右侧的下拉箭头按钮),他们通常喜欢用一个自定义的图标来代替这个按钮.这样就只能用 js + div 来模拟了,倒腾了一番,用jQuery模拟了下,当然网上这种文章也不少,只是懒得去看找 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-t

Bootstrap&lt;基础十四&gt; 按钮下拉菜单

原文:Bootstrap<基础十四> 按钮下拉菜单 使用 Bootstrap class 向按钮添加下拉菜单.如需向按钮添加下拉菜单,只需要简单地在在一个 .btn-group 中放置按钮和下拉菜单即可.也可以使用 <span class="caret"></span> 来指示按钮作为下拉菜单. 下面的实例演示了一个基本的简单的按钮下拉菜单: <!DOCTYPE html> <html> <head> <ti

WPS下拉菜单制作攻略

本次内容简介:如何使用有效性制作下拉菜单 在使用WPS表格的过程中,经常需要录入大量的数据.如果每个数据都通过键盘来输入,不仅浪费时间还浪费精力.利用WPS表格的数据有效性功能,可以快速.准确地输入数据. 例如教师希望按学生的考试成绩划分为四个等级:优秀.良好.合格.不合格,输入过程中会重复的输入这几个等级,如果把几个等级名称集合到一个下拉菜单中进行选择,那会大大简化操作,并节约时间. 在WPS 表格中新增加了"数据有效性"功能,通过以下两种方法都可以实现这一需求: 方法一:通过手动输

WPS 2005如何使用有效性制作下拉菜单

在使用WPS表格的过程中,经常需要录入大量的数据.如果每个数据都通过键盘来输入,不仅浪费时间还浪费精力.利用WPS表格的数据有效性功能,可以快速.准确地输入数据.例如教师希望按学生的考试成绩划分为四个等级:优秀.良好.合格.不合格,输入过程中会重复的输入这几个等级,如果把几个等级名称集合到一个下拉菜单中进行选择,那会大大简化操作,并节约时间. 在WPS 表格中新增加了"数据有效性"功能,通过以下两种方法都可以实现这一需求: 方法一:通过手动输入数据源的方式制做下拉菜单: 方法二:通过引