工具栏

1、相关类

  CToolBarCtrl - 父类CWnd,封装了关于工具栏控件的操作。

  CToolBar - 父类CControlBar,封装了关于工具栏和框架窗口之间的关系,也包括工具栏的创建

2、工具栏的使用

  2.1添加工具栏资源

    在程序的资源视图中的Toolbar下的IDR_MAINFRAME中的工具栏上点击最后一个空白按钮,添加ID为IDM_TEST的自定义按钮:

      

    用鼠标将新添加的按钮向右拖动一点距离后松开,即可在该按钮和其之前的按钮之间添加分隔符;

    在菜单资源的顶层菜单项【帮助】的下拉菜单项中添加ID为IDM_TEST的Test菜单项,并为该菜单项添加消息响应函数:

      

                

void CMainFrame::OnTest() 
{
    // TODO: Add your command handler code here
    MessageBox("test");
    
}

    运行程序可发现,点击菜单栏【帮助】下的【Test】菜单项和点击工具栏中的【T】按钮弹出的是同一个消息框,即两者的消息响应函数均为OnTest函数,因为两者的资源ID相同;

    删除工具栏上某个按钮的方法:在资源窗口中,鼠标左击选中工具栏的某个按钮上,将该按钮拖出工具栏后松开鼠标,即可删除该按钮;

  2.2创建工具栏 CToolBar::CreateEx / CToolBar::Create

    BOOL CreateEx(

      CWnd* pParentWnd,  //指定工具栏对象的父窗口

      DWORD dwCtrlStyle = TBSTYLE_FLAT,  //设置内嵌在工具栏上的CToolBarCtrl对象创建时的扩展风格

      DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP,  //工具栏的样式

      CRect rcBorders = CRect(0, 0, 0, 0),  //工具栏边框的宽度

      UINT nID = AFX_IDW_TOOLBAR  //工具栏子窗口的ID

    );

    BOOL Create(

      CWnd* pParentWnd,  //指定工具栏对象的父窗口

      DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP,  //工具栏的样式

      UINT nID = AFX_IDW_TOOLBAR  //工具栏子窗口的ID

    );

    在工程的资源窗口中插入新的工具栏资源,并在该工具栏上添加按钮:

      

    构造一个CToolBar对象,为CMainFrame类添加成员变量:CToolBar m_newToolBar

      

    在CMainFrame类的OnCreate函数中调用CreateEx或Create函数创建工具栏,并与CToolBar对象相关联;      

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    ......
    
    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
        | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
        !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    {
        TRACE0("Failed to create toolbar\n");
        return -1;      // fail to create
    }
    ......

    // TODO: Delete these three lines if you don't want the toolbar to
    //  be dockable
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar);
    
    ......
    //上方对照可见MFC自动创建默认工具栏的方法
    if (!m_newToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
        | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
        !m_newToolBar.LoadToolBar(IDR_TOOLBAR1))
    {
        TRACE0("Failed to create toolbar\n");
        return -1;      // fail to create
    }
    m_newToolBar.EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_newToolBar);

    return 0;
}

  2.3加载工具栏

    方法一:调用LoadToolBar函数加载工具栏资源

    方法二:调用LoadBitmap函数加载包含工具栏按钮图像的位图;调用SetButtons函数设置按钮样式,并把工具栏上的一个按钮与位图中的一个图像相关联

  2.4工具栏的停靠(船坞化)

    1)工具栏准备停靠的位置

      CToolBar::EnableDocking

    2)框架窗口允许停靠的位置

      CFrameWnd::EnableDocking

    3)框架窗口确定工具栏暂时停靠的位置

      CFrameWnd::DockControlBar

  2.5工具栏的显示和隐藏

    CFrameWnd::ShowControlBar  -显示/隐藏工具栏

    CWnd::IsWindowVisible();  -无参函数,判断一个窗口处于显示还是隐藏状态

    在程序的资源窗口中菜单栏的顶层菜单项【查看】的下拉菜单项中添加【自定义工具栏】的菜单项,该菜单项默认带有复选标记,对应为自定义工具栏的显示,当鼠标点击该菜单项时,复选标记去除,对应自定义工具栏隐藏,再次点击则显示;

    

        

void CMainFrame::OnViewNewtoolbar() 
{
    // TODO: Add your command handler code here
    ShowControlBar(&m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE);   
}

        

void CMainFrame::OnUpdateViewNewtoolbar(CCmdUI* pCmdUI) 
{
    // TODO: Add your command update UI handler code here
    pCmdUI->SetCheck(m_newToolBar.IsWindowVisible());   
}

  2.6去除工具栏

    1)在CMainFrame的头文件中注释掉:

      

    2)在CMainFrame::OnCreate中注释掉:

      

      

转载于:https://www.cnblogs.com/zhouwanqiu/p/6918544.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值