MFC工具栏的创建、设计与使用实例
本文通过实例说明MFC工具栏的创建、设计和使用方法,包括三个demo。
demo1:创建一个工具栏
- //摘抄自MSDN
- demo1 (创建一个工具栏)
- 1.Create a toolbar resource.
- /*可以先插入一个新的工具栏资源
- 添加分隔符,将按钮向右拖动一小下
- 删除按钮,将按钮拖动出工具栏
- */
- 2.Construct the CToolBar object.
- /*
- 工具栏是 CToolBar 对象,声明为应用程序的 CMainFrame 类的数据成员。也就是说,工具栏对象嵌入到主框架窗口对象中。这意味着 MFC 在创建框架窗口时创建工具栏,在销毁框架窗口时销毁工具栏。
- */
- 3.Call the Create (or CreateEx) function to create
- the Windows toolbar and attach it to the CToolBar object.
- 4.Call LoadToolBar to load the toolbar resource.
- /*
- 工具栏创建发生在 CMainFrame::OnCreate 中。MFC 在创建框架窗口之后且在窗口可见之前调用 OnCreate。
- 在 OnCreate 中调用适当的函数来停靠或浮动工具栏、设置它的样式等。
- 应用程序向导”生成的默认 OnCreate 执行以下工具栏任务:
- 1.调用 CToolBar 对象的 Create 成员函数来创建基础 CToolBarCtrl 对象。
- 2.调用 LoadToolBar 来加载工具栏资源信息。
- 3.调用函数来启用停靠、浮动和工具提示。
- */
- class CMainFrame : public CMDIFrameWnd
- {
- // ...
- // Implementation
- // ...
- protected: // control bar embedded members
- CStatusBar m_wndStatusBar;
- CToolBar m_wndToolBar;
- // Generated message map functions
- protected:
- afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
- DECLARE_MESSAGE_MAP()
- };
- int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
- return -1;
- //框架类中m_wndMyToolBar成员变量先调用CreateEx函数,再调用LoadToolBar函数
- 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_MYTOOLBAR))
- {
- TRACE0("Failed to create toolbar\n");
- return -1; // fail to create
- }
- //调用CToolBar中的成员函数设置工具栏可停靠的位置
- m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
- //调用框架类中的成员函数设置哪里可以被停靠
- EnableDocking(CBRS_ALIGN_ANY);
- //Points to the control bar to be docked.
- DockControlBar(&m_wndToolBar);
- return 0;
- }
demo2:停靠和浮动工具栏
- demo2 (停靠和浮动工具栏)
- /*
- 如果使用“应用程序向导”来生成应用程序的主干,向导将要求您选择是否想要可停靠的工具栏。
- 默认情况下,“应用程序向导”生成代码来执行将可停靠工具栏放置在应用程序中所需的三个操作:
- 1.在框架窗口中启用停靠。
- 2.为工具栏启用停靠。
- 3.停靠工具栏(靠向框架窗口)。
- 如果这些步骤中的任何一个缺少,应用程序都将显示标准工具栏。
- 后两个步骤对应用程序中的每一个可停靠工具栏都必须执行。
- */
- CFrameWnd::EnableDocking()//在框架窗口中启用停靠
- /*
- 若要将工具栏停靠到某个框架窗口,则必须启用该框架窗口(或目标)以允许停靠。
- 这可通过使用 CFrameWnd::EnableDocking 函数来实现,该函数采用一个 DWORD 参数,这是一组指示框架窗口的哪一个边接受停靠的样式位。
- 如果一个工具栏即将停靠并且有多个边可以停靠,则在传递给 EnableDocking 的参数中指示的边按以下顺序使用:顶边、底边、左边、右边。
- 如果希望能够将控制条停靠在任意位置,请将 CBRS_ALIGN_ANY 传递给 EnableDocking。
- */
- CControlBar::EnableDocking()//为工具栏启用停靠
- /*
- 准备好停靠目标后,必须以相似的方式准备工具栏(或源)。为想要停靠的每一个工具栏调用 CControlBar::EnableDocking,指定工具栏应停靠的目标边。如果在 CControlBar::EnableDocking 调用中所指定的边没有一个与框架窗口中为停靠启用的边匹配,则工具栏无法停靠(它将浮动)。
- 工具栏一旦浮动,将保持为浮动工具栏,不能停靠到框架窗口。
- 如果希望工具栏永久浮动,请调用参数为 0 的 EnableDocking。然后调用 CFrameWnd::FloatControlBar。工具栏将保持浮动,永远不能在任意位置停靠。
- */
- CFrameWnd::DockControlBar()//停靠工具栏
- /*
- 当用户试图将工具栏放置在允许停靠的框架窗口某一边时,框架调用 CFrameWnd::DockControlBar。
- 另外,可以随时调用该函数将控制条停靠在框架窗口中。这通常在初始化过程中完成。
- 框架窗口的具体某个边上可停靠多个工具栏。
- */
- CFrameWnd::FloatControlBar()//浮动工具栏
- /*
- 从框架窗口分离可停靠工具栏称为浮动工具栏。调用 CFrameWnd::FloatControlBar 来执行该操作。指定要浮动的工具栏、将放置的点以及决定浮动工具栏是水平还是垂直的对齐样式。
- 当用户拖动工具栏离开停靠位置并将它放置在一个未启用停靠的位置时,框架调用该函数。
- 这可以是框架窗口的内部或外部的任意位置。同 DockControlBar 一样,也可以在初始化过程中调用该函数。
- 可停靠工具栏的 MFC 实现不提供一些支持可停靠工具栏的应用程序中有的扩展功能。诸如可自定义工具栏这样的功能不提供。
- */
- int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- //...
- //部分代码略
- //...
- //调用CToolBar中的成员函数设置工具栏可停靠的位置
- m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
- //调用框架类中的成员函数设置哪里可以被停靠
- EnableDocking(CBRS_ALIGN_ANY);
- //Points to the control bar to be docked.
- DockControlBar(&m_wndToolBar);
- return 0;
- }
demo3:点击菜单项显示和隐藏工具栏
- demo3 (点击菜单项显示和隐藏工具栏)
- CFrameWnd::ShowControlBar//显示和隐藏菜单项
- void ShowControlBar( CControlBar* pBar, BOOL bShow, BOOL bDelay );
- void CMainFrame::OnViewNewtool()
- {
- ShowControlBar(&m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE);//控制显示和隐藏
- }
- void CMainFrame::OnUpdateViewNewtool(CCmdUI* pCmdUI)
- {
- // TODO: Add your command update UI handler code here
- pCmdUI->SetCheck(m_newToolBar.IsWindowVisible());//为菜单项打标记
- }
MFC工具栏的创建、设计与使用实例的更多相关文章
- VS2010/MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用)
鸡啄米在上一节教程中讲了工具栏资源及CToolBar类,本节继续讲解工具栏的相关知识,主要内容包括工具栏的创建.停靠与使用. 工具栏的使用 上一节中鸡啄米提到过,一般情况下工具栏中的按钮在菜单栏中都有 ...
- MFC工具栏设计
工具栏中包含了一组用于执行命令的按钮,每个按钮都用一个图标来表示.当单击某个按钮时,会产生一个相应的消息,对这个消息的处理就是按钮的功能实现.将菜单中常用的功能放置在工具栏中,这样可以方便用户操作,省 ...
- T4学习- 2、创建设计时模板
使用设计时 T4 文本模板,您可以在 Visual Studio 项目中生成程序代码和其他文件. 通常,您编写一些模板,以便它们根据来自模型的数据来改变所生成的代码. 模型是包含有关应用程序要求的关键 ...
- VS2010-MFC(工具栏:工具栏的创建、停靠与使用)
转自:http://www.jizhuomi.com/software/217.html 上一节教程讲了工具栏资源及CToolBar类,本节继续讲解工具栏的相关知识,主要内容包括工具栏的创建.停靠与使 ...
- C++MFC编程笔记day03 MFC工具栏、状态栏、视图窗体
MFC工具栏 相关类: CToolBarCtrl - 父类是 CWnd 封装了工具栏控件相关操作 CToolBar - 父类是CControlBar 封装了工具栏和框架窗体之间的关系 工具栏使用: ...
- 初学C#和MVC的一些心得,弯路,总结,还有教训(4)--Cache 关于创建多个缓存实例
asp.net中的数据缓存可以用 HttpRuntime.Cache ,这个是大家都知道的,但如果缓存的数据比较多,又比较杂乱,想要把缓存分开管理(也就是创建多个缓存实例)应该怎么做呢... 于是常规 ...
- PHPExcel创建文件格式写入对象实例
首先到http://www.codeplex.com/PHPExcel下载PHPExcel 下面就是php导出excel的程序 <?phpini_set("display_errors ...
- 李洪强iOS开发之OC[008] -创建一个对象并访问实例变量
// // main.m // 07 - 创建一个对象并且访问实例变量 // // Created by vic fan on 16/7/3. // Copyright © 2016年 李洪强 ...
- MFC应用程序创建窗口的过程 good
MFC应用程序中处理消息的顺序 1.AfxWndProc() 该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc 2.AfxCallWndProc() 该 ...
随机推荐
- 在Linux下面的某一个文件的查找命令
借鉴文章:https://www.kafan.cn/edu/60044166.html Linux查找包含特定字符串的文件名的方法:http://www.jbxue.com/LINUXjishu/97 ...
- 2015.7.7js-07-2(基础)
1.用求模来计算时间,秒%60,就能获取剩余的秒 var s = 362; var minute = parseInt(s/60) + "分" //取得分 var second = ...
- 【咸鱼教程】本地图片上传。动态GIF表情图生成
本案例参考:http://emoji.decathlon.trustingme.cn/但是实现方式不一样. 教程目录一 head first二 打开本地图片功能三 拖拽和缩放手势,调整图片四 gifj ...
- VS2003安装Opencv1.0 windows系统 win7
一.步骤 下载安装opencv1.0 安装文件我上传到百度网盘分享连接 http://pan.baidu.com/s/1o8na0aA 配置电脑windows环境变量 配置VS2003全局设置 ...
- 使用Speech SDK 5.1文字转音频
下载地址: http://www.microsoft.com/en-us/download/details.aspx?id=10121 SeppchSDK51.exe 语音合成引擎 SpeechSDK ...
- mysql补充(4)数据完整性
数据完整性(Data Integrity)是指数据的精确性(Accuracy) 和可靠性(Reliability).(补充mysql数据完整性和约束) 它是应防止数据库中存在不符合语义规定的数据和防止 ...
- MONGOOSE – 让NODE.JS高效操作MONGODB(转载)
Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...
- poj1850Code
Code Transmitting and memorizing information is a task that requires different coding systems for th ...
- Redis used_cpu_sys used_cpu_user meaning (redis info中cpu信息的含义)
Redis 中 used_cpu_sys 和 used_cpu_user含义. 在Redis的info命令输出结果中有如下四个指标,redis官网给出了下面一段解释,但是还是不明白什么意思. used ...
- laravel5.1接收ajax数据
前台: $.ajax({ type: 'POST', url: '{!! url('aw/data') !!}', data:{'_token':'<?php echo csrf_token() ...