1. 首先在CMainFrame::OnCreate 函数下添加如下代码,让工具栏有下拉能力和向下的箭头按钮;
// 让工具栏具有处理下拉箭头的能力
DWORD dwExStyle = TBSTYLE_EX_DRAWDDARROWS;
m_wndToolBar.GetToolBarCtrl().SendMessage(TB_SETEXTENDEDSTYLE, 0, (LPARAM)dwExStyle);
// 选定的地方添加下拉箭头按钮,其中ID_SOUCANG为对应的工具栏按钮ID
DWORD dwStyle = m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_SOUCANG));
dwStyle |= TBSTYLE_DROPDOWN;
m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_SOUCANG),dwStyle);
注:需要加下拉菜单的按钮必须一直保持可用状态,这个可以将按钮关联到某个菜单中,也可以给按钮添加UPDATE_COMMOND_UI函数,并添加一下代码:
void CMainFrame::OnUpdateSoucang(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(TRUE);
}
2. 在MainFrame.cpp中添加:
ON_NOTIFY(TBN_DROPDOWN,AFX_IDW_TOOLBAR, OnToolbarDropDown)
在MainFrame.h中分别添加:
afx_msg voidOnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes);
其函数体代码如下:
void OnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes)
{
CWnd *pWnd;
UINT nID;
switch(pnmtb->iItem)
{
case ID_SOUCANG:
pWnd = &m_wndToolBar;
nID = IDR_MAINFRAME;
break;
default:
return;
}
// load and display popup menu
CMenu menu;
menu.LoadMenu(nID);
CMenu* pPopup = menu.GetSubMenu(3);
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);
}