zoukankan      html  css  js  c++  java
  • VC++ 浅谈VS2010中CMFCToolBar的用法

     

    本文将给大家介绍Visual Studio 2010中CMFCToolBar的用法,CMFCToolBar可以让用户自定义工具栏图标,使用静态成员函数SetUserImages()将一个CMFCToolBarImages对象设置进去,由所有CMFCToolBar对象共享。

    AD:

    自从VS2008中增加了一些特性的菜单,但这些特性在帮助中说明的很少,给使用者造成了很多麻烦。笔者经过搜索以及自己的摸索,对其的用法有了初步了解,形成本文,如果能够为后来者解决一些问题,笔者将会感到欣慰。

    一、向导自动生成的CMFCToolBar

    由于应用了系统风格,向导生成的菜单确实很漂亮。如下图:

    但在某些情况下(至于哪些情况,笔者还不能确定),向导自动生成的菜单会没有名字,在“工具栏和停靠窗口”的子菜单下会显示空。如下图:

    出现这种情况的解决办法就是自己给工具栏命个名称。在CMainFrame::OnCreate()事件中给工具栏命名:

    1. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)  
    2. {  
    3. ……  
    4. // TODO: 如果您不希望工具栏和菜单栏可停靠,请删除这五行  
    5. m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);  
    6. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);  
    7. EnableDocking(CBRS_ALIGN_ANY);  
    8. DockPane(&m_wndMenuBar);  
    9. DockPane(&m_wndToolBar);  
    10. m_wndToolBar.SetWindowText(_T(“工具栏”)); //这是自己添加的  
    11. ……  
    12. return 0;  

    二、自己添加一条工具栏

    自己添加的工具栏如果按照向导生成的样子去做,在菜单中是不会显示出来的,虽然工具栏已经生成了。如下图:

    要想让菜单在“工具栏和停靠窗口”中显示,是不能完全按照向导生成的样子做的。需要模仿向导生成的样子做但仍有点变化。

    (1) 创建自已的工具栏

    在头文件中定义一个工具栏变量。CMFCToolBar m_wndToolBar2;

    在CMainFrame::OnCreate()事件中创建并加载工具栏:

    1. if(!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |WS_VISIBLE |CBRS_TOP |CBRS_GRIPPER |CBRS_TOOLTIPS |CBRS_FLYBY |CBRS_SIZE_DYNAMIC) ||  
    2. !m_wndToolBar.LoadToolBar(theApp.m_bHiColorIcons ?IDR_MAINFRAME_256 : IDR_MAINFRAME))  
    3. {  
    4. TRACE0("未能创建工具栏 ");return-1;//未能创建  
    5. }//自己创建的工具栏  
    6. if(!m_wndToolBar2.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |WS_VISIBLE |CBRS_TOP |CBRS_GRIPPER |CBRS_TOOLTIPS |CBRS_FLYBY |CBRS_SIZE_DYNAMIC,CRect(1,1,1,1),theApp.m_bHiColorIcons ?IDR_MAINFRAME_256 +1: IDR_MAINFRAME+1) ||  
    7. !m_wndToolBar2.LoadToolBar(theApp.m_bHiColorIcons ?IDR_MAINFRAME_256 : IDR_MAINFRAME))  
    8. {  
    9. TRACE0("未能创建工具栏 ");return-1;//未能创建  

    (2) 自己的工具栏浮动或停靠窗口

    1. //TODO: 如果您不希望工具栏和菜单栏可停靠,请删除这五行  
    2. m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);  
    3. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);  
    4. m_wndToolBar2.EnableDocking(CBRS_ALIGN_ANY);//自己创建的工具栏  
    5. EnableDocking(CBRS_ALIGN_ANY);  
    6. DockPane(&m_wndMenuBar);  
    7. DockPane(&m_wndToolBar);  
    8.  DockPane(&m_wndToolBar2);//自己创建的工具栏 

    这时候再运行程序会显示如下图:

    (3) 给自己的工具栏命名

    m_wndToolBar2.SetWindowText(_T("我的工具栏"));

    此时程序运行如下图:

    三、浮动我的工具栏

    在以前CToolBar的时候,浮动工具栏可以使用FloatControlBar()函数。但在CMFCToolBar却不能这么用,需要使用CMFCToolBar::FloatPane()函数。、m_wndToolBar2.FloatPane(CRect(80,150,130,200));

    四、显示或隐藏我的工具栏

    在CToolBar的时候,显示或隐藏工具栏可以使用ShowControlBar()函数,但在CMFCToolBar时需要使用CMFCToolBar::ShowPane()函数。

    this->ShowPane(&m_wndToolBar2,FALSE,FALSE,TRUE);

    this->ShowPane(&m_wndToolBar2,TRUE,FALSE,TRUE);

    或者

    m_wndToolBar2.ShowPane(FALSE,FALSE,TRUE);

    m_wndToolBar2.ShowPane(TRUE,FALSE,TRUE);

    五、余下的问题

    如何使工具栏能够成为两行或者多行,也可以说如何使工具栏成为两列或者多列。

    原文链接:http://www.cnblogs.com/luoshupeng/archive/2011/08/15/2139645.html

  • 相关阅读:
    Algorithm --> KMP算法
    Algorithm --> 快速排序
    Algorithm --> 阶乘和因子
    Algorithm --> Dijkstra和Floyd最短路径算法
    Algorithm --> 二分图最大匹配
    Algorithm --> 邮票连续组合问题
    Algorithm --> 字母重排
    Algorithm --> 6174问题
    Algorithm --> 字符串中最长不重合子串长度
    Algorithm --> DFS和BFS
  • 原文地址:https://www.cnblogs.com/lujin49/p/4729246.html
Copyright © 2011-2022 走看看