MFC一一在Toolbar为按钮提供下拉菜单

在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);//弹出菜单
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值