向工具栏按钮添加下拉箭头






4.69/5 (19投票s)
1999年12月16日

668553

2241
演示如何使用新的工具栏样式向工具栏按钮添加下拉箭头。
如果你想添加像 Internet Explorer 中看到的下拉菜单,这很简单。这种方法适用于 Visual C++ 5 和 6,但是你可能需要了解 VC 6.0 中工具栏类别的增强功能。
首先,在 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);
现在,你需要为下拉箭头添加一个消息处理程序,以及一个菜单到应用程序资源中。假设你已经知道如何创建菜单(如果不知道,点击资源选项卡,选择资源名称,例如:MyApp Resources,然后右键单击。选择插入,然后选择菜单,然后按“新建”按钮),并且假设我们的菜单的资源 ID 是 IDR_MENU1
,将以下代码添加到 CMainFrame 的消息映射中
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ... ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnToolbarDropDown) //}}AFX_MSG_MAP END_MESSAGE_MAP()
将以下方法添加到 CMainFrame 的 .cpp 文件中
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); }
然后在 CMainFrame 的 .h 文件中添加以下内容
//{{AFX_MSG(CMainFrame) ... afx_msg void OnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes); //}}AFX_MSG