本文通过实例说明MFC工具栏的创建、设计和使用方法,包括三个demo。

      demo1:创建一个工具栏

C++代码
  1. //摘抄自MSDN
  2. demo1 (创建一个工具栏)
  3. 1.Create a toolbar resource.
  4. /*可以先插入一个新的工具栏资源
  5. 添加分隔符,将按钮向右拖动一小下
  6. 删除按钮,将按钮拖动出工具栏
  7. */
  8. 2.Construct the CToolBar object.
  9. /*
  10. 工具栏是 CToolBar 对象,声明为应用程序的 CMainFrame 类的数据成员。也就是说,工具栏对象嵌入到主框架窗口对象中。这意味着 MFC 在创建框架窗口时创建工具栏,在销毁框架窗口时销毁工具栏。
  11. */
  12. 3.Call the Create (or CreateEx) function to create
  13. the Windows toolbar and attach it to the CToolBar object.
  14. 4.Call LoadToolBar to load the toolbar resource.
  15. /*
  16. 工具栏创建发生在 CMainFrame::OnCreate 中。MFC 在创建框架窗口之后且在窗口可见之前调用 OnCreate。
  17. 在 OnCreate 中调用适当的函数来停靠或浮动工具栏、设置它的样式等。
  18. 应用程序向导”生成的默认 OnCreate 执行以下工具栏任务:
  19. 1.调用 CToolBar 对象的 Create 成员函数来创建基础 CToolBarCtrl 对象。
  20. 2.调用 LoadToolBar 来加载工具栏资源信息。
  21. 3.调用函数来启用停靠、浮动和工具提示。
  22. */
  23. class CMainFrame : public CMDIFrameWnd
  24. {
  25. // ...
  26. // Implementation
  27. // ...
  28. protected:  // control bar embedded members
  29. CStatusBar  m_wndStatusBar;
  30. CToolBar    m_wndToolBar;
  31. // Generated message map functions
  32. protected:
  33. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  34. DECLARE_MESSAGE_MAP()
  35. };
  36. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  37. {
  38. if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
  39. return -1;
  40. //框架类中m_wndMyToolBar成员变量先调用CreateEx函数,再调用LoadToolBar函数
  41. if (! m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  42. | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  43. ! m_wndToolBar.LoadToolBar(IDR_MYTOOLBAR))
  44. {
  45. TRACE0("Failed to create toolbar\n");
  46. return -1;      // fail to create
  47. }
  48. //调用CToolBar中的成员函数设置工具栏可停靠的位置
  49. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  50. //调用框架类中的成员函数设置哪里可以被停靠
  51. EnableDocking(CBRS_ALIGN_ANY);
  52. //Points to the control bar to be docked.
  53. DockControlBar(&m_wndToolBar);
  54. return 0;
  55. }

      demo2:停靠和浮动工具栏

C++代码
  1. demo2 (停靠和浮动工具栏)
  2. /*
  3. 如果使用“应用程序向导”来生成应用程序的主干,向导将要求您选择是否想要可停靠的工具栏。
  4. 默认情况下,“应用程序向导”生成代码来执行将可停靠工具栏放置在应用程序中所需的三个操作:
  5. 1.在框架窗口中启用停靠。
  6. 2.为工具栏启用停靠。
  7. 3.停靠工具栏(靠向框架窗口)。
  8. 如果这些步骤中的任何一个缺少,应用程序都将显示标准工具栏。
  9. 后两个步骤对应用程序中的每一个可停靠工具栏都必须执行。
  10. */
  11. CFrameWnd::EnableDocking()//在框架窗口中启用停靠
  12. /*
  13. 若要将工具栏停靠到某个框架窗口,则必须启用该框架窗口(或目标)以允许停靠。
  14. 这可通过使用 CFrameWnd::EnableDocking 函数来实现,该函数采用一个 DWORD 参数,这是一组指示框架窗口的哪一个边接受停靠的样式位。
  15. 如果一个工具栏即将停靠并且有多个边可以停靠,则在传递给 EnableDocking 的参数中指示的边按以下顺序使用:顶边、底边、左边、右边。
  16. 如果希望能够将控制条停靠在任意位置,请将 CBRS_ALIGN_ANY 传递给 EnableDocking。
  17. */
  18. CControlBar::EnableDocking()//为工具栏启用停靠
  19. /*
  20. 准备好停靠目标后,必须以相似的方式准备工具栏(或源)。为想要停靠的每一个工具栏调用 CControlBar::EnableDocking,指定工具栏应停靠的目标边。如果在 CControlBar::EnableDocking 调用中所指定的边没有一个与框架窗口中为停靠启用的边匹配,则工具栏无法停靠(它将浮动)。
  21. 工具栏一旦浮动,将保持为浮动工具栏,不能停靠到框架窗口。
  22. 如果希望工具栏永久浮动,请调用参数为 0 的 EnableDocking。然后调用 CFrameWnd::FloatControlBar。工具栏将保持浮动,永远不能在任意位置停靠。
  23. */
  24. CFrameWnd::DockControlBar()//停靠工具栏
  25. /*
  26. 当用户试图将工具栏放置在允许停靠的框架窗口某一边时,框架调用 CFrameWnd::DockControlBar。
  27. 另外,可以随时调用该函数将控制条停靠在框架窗口中。这通常在初始化过程中完成。
  28. 框架窗口的具体某个边上可停靠多个工具栏。
  29. */
  30. CFrameWnd::FloatControlBar()//浮动工具栏
  31. /*
  32. 从框架窗口分离可停靠工具栏称为浮动工具栏。调用 CFrameWnd::FloatControlBar 来执行该操作。指定要浮动的工具栏、将放置的点以及决定浮动工具栏是水平还是垂直的对齐样式。
  33. 当用户拖动工具栏离开停靠位置并将它放置在一个未启用停靠的位置时,框架调用该函数。
  34. 这可以是框架窗口的内部或外部的任意位置。同 DockControlBar 一样,也可以在初始化过程中调用该函数。
  35. 可停靠工具栏的 MFC 实现不提供一些支持可停靠工具栏的应用程序中有的扩展功能。诸如可自定义工具栏这样的功能不提供。
  36. */
  37. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  38. {
  39. //...
  40. //部分代码略
  41. //...
  42. //调用CToolBar中的成员函数设置工具栏可停靠的位置
  43. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  44. //调用框架类中的成员函数设置哪里可以被停靠
  45. EnableDocking(CBRS_ALIGN_ANY);
  46. //Points to the control bar to be docked.
  47. DockControlBar(&m_wndToolBar);
  48. return 0;
  49. }

      demo3:点击菜单项显示和隐藏工具栏

C++代码
  1. demo3 (点击菜单项显示和隐藏工具栏)
  2. CFrameWnd::ShowControlBar//显示和隐藏菜单项
  3. void ShowControlBar( CControlBar* pBar, BOOL bShow, BOOL bDelay );
  4. void CMainFrame::OnViewNewtool()
  5. {
  6. ShowControlBar(&m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE);//控制显示和隐藏
  7. }
  8. void CMainFrame::OnUpdateViewNewtool(CCmdUI* pCmdUI)
  9. {
  10. // TODO: Add your command update UI handler code here
  11. pCmdUI->SetCheck(m_newToolBar.IsWindowVisible());//为菜单项打标记
  12. }
转自:http://www.jizhuomi.com/software/181.html

MFC工具栏的创建、设计与使用实例的更多相关文章

  1. VS2010/MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用)

    鸡啄米在上一节教程中讲了工具栏资源及CToolBar类,本节继续讲解工具栏的相关知识,主要内容包括工具栏的创建.停靠与使用. 工具栏的使用 上一节中鸡啄米提到过,一般情况下工具栏中的按钮在菜单栏中都有 ...

  2. MFC工具栏设计

    工具栏中包含了一组用于执行命令的按钮,每个按钮都用一个图标来表示.当单击某个按钮时,会产生一个相应的消息,对这个消息的处理就是按钮的功能实现.将菜单中常用的功能放置在工具栏中,这样可以方便用户操作,省 ...

  3. T4学习- 2、创建设计时模板

    使用设计时 T4 文本模板,您可以在 Visual Studio 项目中生成程序代码和其他文件. 通常,您编写一些模板,以便它们根据来自模型的数据来改变所生成的代码. 模型是包含有关应用程序要求的关键 ...

  4. VS2010-MFC(工具栏:工具栏的创建、停靠与使用)

    转自:http://www.jizhuomi.com/software/217.html 上一节教程讲了工具栏资源及CToolBar类,本节继续讲解工具栏的相关知识,主要内容包括工具栏的创建.停靠与使 ...

  5. C++MFC编程笔记day03 MFC工具栏、状态栏、视图窗体

    MFC工具栏 相关类: CToolBarCtrl - 父类是 CWnd  封装了工具栏控件相关操作 CToolBar - 父类是CControlBar  封装了工具栏和框架窗体之间的关系 工具栏使用: ...

  6. 初学C#和MVC的一些心得,弯路,总结,还有教训(4)--Cache 关于创建多个缓存实例

    asp.net中的数据缓存可以用 HttpRuntime.Cache ,这个是大家都知道的,但如果缓存的数据比较多,又比较杂乱,想要把缓存分开管理(也就是创建多个缓存实例)应该怎么做呢... 于是常规 ...

  7. PHPExcel创建文件格式写入对象实例

    首先到http://www.codeplex.com/PHPExcel下载PHPExcel 下面就是php导出excel的程序 <?phpini_set("display_errors ...

  8. 李洪强iOS开发之OC[008] -创建一个对象并访问实例变量

    // //  main.m //  07 - 创建一个对象并且访问实例变量 // //  Created by vic fan on 16/7/3. //  Copyright © 2016年 李洪强 ...

  9. MFC应用程序创建窗口的过程 good

    MFC应用程序中处理消息的顺序 1.AfxWndProc()      该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc 2.AfxCallWndProc()  该 ...

随机推荐

  1. 本地项目通过github客户端上传到github网站上

    一.github客户端上传步骤 一.github客户端上传步骤1.百度搜索关键字: GitHub 离线安装包 ==> Github_3.3.4.0版本链接:https://pan.baidu.c ...

  2. Unity3D Animator控制参数和添加事件

    Animator控制参数和添加事件 using UnityEngine; using System.Collections; public class AniControl : MonoBehavio ...

  3. 【读书笔记】socket函数

    socket函数 简介 应用程序调用socket函数来创建一个能够进行网络通信的套接字. 1 2 3 4 5 /* 头文件 */ #include <sys/types.h> #inclu ...

  4. PHP服务器访问优化

    常规的优化措施: 磁盘写入,网络安全,证书加密,CPU,内存,DNS解析,数据库优化,页面gzip压缩 PHP gzip压缩打开: 打开php目录下的php.ini文件,找到zlib.output_c ...

  5. 9.21 form 和Ajax详解

    form 表单 参考连接  : http://www.cnblogs.com/liwenzhou/p/8747872.html

  6. 从UE(用户体验)到道家誓学再到李小龙

    公司大Boss经常会给我做技术培训,感觉他什么都知道,也挺喜欢听他的课. 本文记录可能比较天马行空,我的语文比较差,很难把自己想表达的说出来,为此我就是记录一样关键字,可能这样还会更好些 背景是讲用户 ...

  7. Oracle安全之 Oracle 11g flashback技术详解

    Oracle11g提供的闪回技术用于对抗人为错误,主要有以下7种技术组成: 闪回查询-(闪回时间查询.闪回版本查询): 闪回数据归档: 闪回事务查询: 闪回事务: 闪回表: 闪回删表: 闪回数据库. ...

  8. MySQL在linux上(cmake)的source code安装方法

    1.安装前准备: 1)必备的包和工具  gcc/g++ :MySQL 5.6开始,需要使用g++进行编译.  cmake  :MySQL 5.5开始,使用cmake进行工程管理,cmake需要2.8以 ...

  9. wxWidgets与其他工具库的比较(下)

    2009-07-25 12:37:51   GTK+       ● GTK+的网站:www.gtk.org:     ● GTK+原本是Gimp的一个工具库,是在LGPL协议下发布的Unix系统GU ...

  10. 解决 libev.so.4()(64bit) is needed by percona-xtrabackup-2.3.4-1.el6.x86_64案例

    在mysql主从同步时经常会用到Xtra, XtraBackup可以说是一个相对完美的免费开源数据备份工具,支持在线无锁表同步复制和可并行高效率的安全备份恢复机制相比mysqldump来说优势较大好处 ...