VS2015 MFC 工具栏编程

一 一般地,工具栏是菜单栏中菜单命令的图标按钮形式。

二 工具栏删除 Delete键只是删除了图标,要删除某个工具栏按钮,只需要鼠标左键按下,拖出到工具栏以外即可。如果要添加分隔符,只需要按下该图标,然后向工具栏右边轻微拖动,再次运行就可以看到分隔栏。

三 MFC自带工具栏的创建过程:

     MainFrame.h中定义了一个受保护的变量:protected CToolBar m_wndToolBar;

    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("未能创建工具栏\n");
        return -1;      // 未能创建
    }

    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); //设置自己的停靠方式
    EnableDocking(CBRS_ALIGN_ANY);   //CMainFrame的成员 表示接收哪一种停靠方式
    DockControlBar(&m_wndToolBar);       //实现主工具栏停靠在主框架上

四 参照MFC自带工具栏创建属于自己的工具栏

       4.1 添加ToolBar资源

  4.2 在CMainFrame中添加一个受保护的CToolBar类型的成员变量m_newToolBar

  4.3 调用Create函数与主窗体相关联

    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_NEWTOOLBAR))
    {
        TRACE0("未能创建自定义的工具栏\n");
        return -1;      // 未能创建
    }
m_newToolBar.EnableDocking(CBRS_ALIGN_ANY);
    //EnableDocking(CBRS_ALIGN_ANY); 由于这是在现有基础上新增的,无需再次调用
    DockControlBar(&m_newToolBar); //让它停靠在主窗口上

至此创建出来的工具栏显示隐藏不正常,按钮不显示,显示一个空白工具框。

void CMainFrame::OnNewtoolbarbtn()
{
    //if (m_newToolBar.IsWindowVisible())
    //{
    //    m_newToolBar.ShowWindow(SW_HIDE);
    //}
    //else
    //{
    //    m_newToolBar.ShowWindow(SW_SHOW);
    //}
    //RecalcLayout(); //由于工具栏隐藏或显示 会影响到其他工具或窗口的布局,因此需要调用该函数,否则只隐藏了按钮,工具栏还在

    ////当工具栏按钮处于浮动状态时,如果单击该按钮,按钮隐藏了,但是工具栏没有隐藏。
    ////因此需要再次调用DockControlBar(&m_newToolBar);
    //DockControlBar(&m_newToolBar);
    ////浮动状态时,隐藏之后,再显示的时候,它会出现在顶部位置,而不是原来的位置

    ShowControlBar(&m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE);//一个函数代替上面多行代码,且能正常隐藏和显示
}
void CMainFrame::OnUpdateNewtoolbarbtn(CCmdUI *pCmdUI) //UPDATE_COMMAND_UI 类型的消息
{
    pCmdUI->SetCheck(m_newToolBar.IsWindowVisible()); //设置复选标记
}

猜你喜欢

转载自www.cnblogs.com/zhou8744/p/10625119.html
今日推荐