MFC工具栏按钮下拉

18 篇文章 0 订阅

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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值