QQ登录

只需一步,快速开始

上位机MFC工具栏实现下拉按钮

[ 复制链接 ]
正常工具栏不支持按钮的下拉功能。
但有时我们会将相似功能的多个按钮集合放在一起,集中起来更好操作。
这样我们就可以通过下拉的形式,让用户选择不同按钮,进而实现相似功能。
这个例程实现工具栏下拉按钮功能,效果如图
点击工具栏上的下拉按钮,可以打开其他按钮

上位机MFC工具栏实现下拉按钮

上位机MFC工具栏实现下拉按钮

下载地址:
请点击此处下载

查看状态:已购买或有权限

您的用户组是:游客

文件名称:DROPDOWN_ARROW.rar 
文件大小:32.37 KB 
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我



实现过程
首先,在调用CMainFrame::OnCreate()创建了工具条后,需要调用下面的方法:

        m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);

这将使得你的工具条处理下拉箭头。下一步要做的事情是:to actually add the drop arrow to your desired button. This will be done via the SetButtonStyle() method:

        DWORD dwStyle = m_wndToolBar.GetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN));
        dwStyle |= TBSTYLE_DROPDOWN;
        m_wndToolBar.SetButtonStyle(m_wndToolBar.CommandToIndex(ID_FILE_OPEN), dwStyle);


现在,需要为下拉箭头提供一个消息处理函数,以及应用程序菜单资源。

增加下面代码到 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的实现文件中:

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的头文件中:

        //{{AFX_MSG(CMainFrame)
        ...
        afx_msg void OnToolbarDropDown(NMTOOLBAR* pnmh, LRESULT* plRes);
        //}}AFX_MSG



回复

使用道具 举报

快速回复 返回列表 客服中心 搜索