vc6.0为工具条上的按钮添加下三角下拉菜单

1、afx_msg void OnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes);

2、ON_NOTIFY_REFLECT(TBN_DROPDOWN, OnToolbarDropDown)

3、GetToolBarCtrl().SendMessage(TB_SETEXTENDEDSTYLE, 0, (LPARAM)TBSTYLE_EX_DRAWDDARROWS);

4、SetButtonStyle(CommandToIndex(uButtonID), TBSTYLE_DROPDOWN);

5、添加菜单资源

6、SendMessage(TB_GETRECT, (WPARAM)pnmtb->iItem, (LPARAM)&rc);
7、ClientToScreen(&rc);   
8、pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,rc.left, rc.bottom, DropDownInfo.pParent, &rc);

 

以后借鉴

 

VC实现工具栏上的下拉列表

     我们在使用IE6.0时,发现后退和前进后面均有个下拉箭头,点击这些下拉列表就会弹出一些历史链接地址。这种效果我们用VC如何实现呢?

    我们可以分为几步来做。

   第一步.新建一个Single型的MFC工程。在MainFrame.cpp中的OnCreate()的return 0前加入如下代码;

   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);     

第二步,有了下拉箭头,我们要加入消息映射宏。具体做法是,在MainFrame.cpp中加入下拉箭头的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()     

第三步, 在MainFrame.h头文件中加入消息处理函数的声明: 

      //{{AFX_MSG(CMainFrame)

         afx_msg void OnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes);

      //}}AFX_MSG   

第四步,加入菜单。其ID=IDR_MENU1

    如FILE菜单,下面加入三个选项,分别为OPEN,SAVE,CLOSE

第五步,实现MAINFRAME.CPP中TBN_DROPDOWN()函数:

void CMainFrame::OnToolbarDropDown(NMTOOLBAR* pnmtb, LRESULT *plr)
{
 CWnd *pWnd;
 UINT nID;
 
 // Switch on button command id''s.
 switch (pnmtb->iItem)
 {
 case ID_FILE_OPEN:
  pWnd = &m_wndToolBar;
  nID  = IDR_MENU1;
  break;
 default:
  return;
 }
    
 // load and display popup menu
 CMenu menu;
 menu.LoadMenu(nID);
 CMenu* pPopup = menu.GetSubMenu(0);
 ASSERT(pPopup);
    
 CRect rc;
 pWnd->SendMessage(TB_GETRECT, pnmtb->iItem, (LPARAM)&rc);
 pWnd->ClientToScreen(&rc);
    
 pPopup->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
  rc.left, rc.bottom, this, &rc);
      }    

第六步,在MainFrame.h和MainFrame.cpp分别对File菜单下的三个菜单项添加相关声明和函数。如下

void CMainFrame::OnMenuitem32771() 
{
 // TODO: Add your command handler code here
 AfxMessageBox("open a file");

}

void CMainFrame::OnMenuitem32772() 
{
 // TODO: Add your command handler code here
  AfxMessageBox("save a file");
}

void CMainFrame::OnMenuitem32773() 
{
 // TODO: Add your command handler code here
  AfxMessageBox("close a file");
}

最后,按CTRL+F5运行即可实现

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值