Chinaunix首页 | 论坛 | 博客
  • 博客访问: 363682
  • 博文数量: 56
  • 博客积分: 2721
  • 博客等级: 中校
  • 技术积分: 460
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-29 16:18
文章分类

全部博文(56)

文章存档

2014年(1)

2011年(15)

2010年(5)

2008年(35)

分类: C/C++

2011-01-04 17:01:02

若要在工具条上放置下拉按钮,需要将工具条的的扩展样式设置为TBSTYLE_EX_DRAWDARROWS
当用户点击下拉箭头(或者没有下拉箭头的按钮)的时候,TBN_DROPDOWN通知被发送到工具条的父窗口,可以在消息处理函数中来显示菜单。
具体实现一个工具条下拉按钮的步骤:
1. 设置CToolBarCtrl对象的扩展样式为TBSTYLE_EX_DRAWDDARROWS
  1. m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
2. 将工具条按钮的样式设置为TBSTYLE_DROPDOWN
  1. TBBUTTONINFO tbi;

  2. tbi.dwMask= TBIF_STYLE;
  3. tbi.cbSize= sizeof(TBBUTTONINFO);
  4. m_wndToolBar.GetToolBarCtrl().GetButtonInfo(ID_EDIT_CUT, &tbi);
  5. tbi.fsStyle |= TBSTYLE_DROPDOWN;
  6. m_wndToolBar.GetToolBarCtrl().SetButtonInfo(ID_EDIT_CUT, &tbi);
或者
  1. DWORD dwStyle = m_wndToolBar.GetButtonStyle(
  2. m_wndToolBar.CommandToIndex(ID_FILE_OPEN));
  3. dwStyle |= TBSTYLE_DROPDOWN;
  4. m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN), dwStyle);
3. 在父窗口中响应WM_NOTIFY消息,检查TBN_DROPDOWN通知:
  1. #define lpnm ((LPNMHDR)lParam)
  2. #define lpnmTB ((LPNMTOOLBAR)lParam)

  3.    switch(lpnm->code)
  4.    {
  5.       case TBN_DROPDOWN:
  6.          //drop down button was hit
  7.          //handle appropriately
  8.          . . .
  9.          return FALSE; //indicates the TBN_DROPDOWN
  10.                        //notification was handled.
  11.    }
4. 显示菜单:
  1. CMenu menu;
  2. VERIFY(menu.LoadMenu(IDR_MENU1));
  3. CMenu* pPopup = menu.GetSubMenu(0);
  4. ASSERT(pPopup != NULL);
  5. pPopup->TrackPopupMenu(TPM_RIGHTALIGN |
  6.    TPM_RIGHTBUTTON, x, y, this);
【参考资料】:MSDN - Using Drop-Down Buttons in a Toolbar Control
阅读(1783) | 评论(0) | 转发(0) |
0

上一篇:MFC中常见的宏定义

下一篇:自绘编辑框

给主人留下些什么吧!~~