在Toolbar工具中,有的按钮需要实现下拉菜单,方便使用,那么添加下拉菜单需要的步骤如下:
1.在OnCreate函数中针对创建的Toolbar获取到对应的按钮属性,并设置为具有下拉风格
m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);//设置工具栏的扩展风格
DWORD dwStyle=m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_CONFIGURE_STYLE));//获取按钮控件的风格
dwStyle|=TBSTYLE_DROPDOWN;//设置下拉风格
m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_CONFIGURE_STYLE),dwStyle);
2.创建你点击Toolbar上对应的按钮后需要下拉的菜单栏,插入新的Resouse:Menu,在这里我新建的Menu它的ID是IDR_POPUP_STYLE
3.在CMainFrame类的消息映射中(即MainFrm.cpp )加入下拉箭头的TBN_DROPDOWN消息映射
此消息映射需要手动添加,添加步骤
(1).消息映射表中加入如下语句
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_NOTIFY(TBN_DROPDOWN,AFX_IDW_TOOLBAR,OnToolbarDropDown)
END_MESSAGE_MAP()
(2).在MainFrame.h头文件中加入消息处理函数的声明:
afx_msg void OnToolbarDropDown(NMHDR* pnmhdr, LRESULT* plRes);
(3).在MainFrame.cpp中实现消息处理函数:
afx_msg void CMainFrame::OnToolbarDropDown(NMHDR* pnmhdr, LRESULT* plRes)
{
LPNMTOOLBAR pnmh = reinterpret_cast<LPNMTOOLBAR>(pnmhdr);
CWnd *pWnd;
UINT nID;
switch(pnmh->iItem)
{
case ID_CONFIGURE_STYLE:
pWnd=&m_wndToolBar;
nID=IDR_MENU_STYLE;
break;
default:
return;
}
CMenu cMenu;
cMenu.LoadMenu(nID);
CMenu* pPop=cMenu.GetSubMenu(0);//加载下拉菜单
CRect cRect;
pWnd->SendMessage(TB_GETRECT,pnmh->iItem,(LPARAM)&cRect);//取得下拉按钮的矩形区域
pWnd->ClientToScreen(&cRect);//转换为屏幕坐标
pPop->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,cRect.left,cRect.bottom,this,&cRect);//弹出菜单
}