最近在学MFC,看的是孙鑫的VC++视频,感觉还不错。在看到第九节课的时候,讲到工具栏的时候,做了个小功能:工具栏的隐藏和显示,但是有个bug就是一个悬浮的工具栏隐藏后再显示,就会变成停靠状态。这里我又把工具栏的隐藏与显示又实现了一遍,去掉了这个bug,做到跟MFC中自带的菜单栏中视图->工具栏菜单项一样的功能。

其实,关于工具栏的隐藏与显示问题,只需要考虑三种状态:(1)在停靠状态下工具栏的显示与隐藏;(2)在悬浮状态下工具栏的显示与隐藏;(3)在悬浮状态下,通过点击关闭按钮去关闭工具栏,然后在显示工具栏的问题。

对于上面所述的第二种情况,要记住工具栏在将要隐藏时刻的窗口坐标(x,y),这一点可以在点击菜单项去隐藏工具栏的时候可以做到。同样对于第三种情况,要记住工具栏在关闭时刻的坐标位置,在这里我们可以自己创建一个类CMyToolbar,这个类继承于CToolbar,在这个类里面添加WM_WINDOWPOSCHANGED消息处理函数OnWindowPosChanged。这个消息每当工具栏的大小或者位置发生变化是就会触发,因此我们在每次触发这个消息的时候,在其处理函数里面先判读是否为悬浮状态,如果是再获取当前窗口的位置,然后保存起来。

好了,上面说了那么多现在开始上代码。首先先看一下在CMainFrame.h中要添加的变量成员。

然后在CMainFrame.cpp中添加工具栏菜单项的相应函数,具体代码如下:

最后我们要创建一个CMyToolbar的类,继承于CToolbar类,其中CMyToolbar.h添加代码如下:

然后在CMyToolbar中实现OnWindowPosChanged函数

到此,代码部分全部结束。运行结果演示:

MFC 工具栏隐藏与显示的更多相关文章

  1. MFC中隐藏和显示光标的切换

    函数原型:int ShowCursor(BOOL bShow): 参数: bShow:确定内部的显示计数器是增加还是减少,如果bShow为TRUE,则显示计数器增加1,如果bShow为FALSE,则计 ...

  2. MFC工具栏的创建、设计与使用实例

    本文通过实例说明MFC工具栏的创建.设计和使用方法,包括三个demo.       demo1:创建一个工具栏 C++代码 //摘抄自MSDN demo1 (创建一个工具栏) 1.Create a t ...

  3. MFC工具栏设计

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

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

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

  5. VC MFC工具栏(CToolBar)控件

    一.工具栏 工具栏控件在控件面板里没有对应的选项(图标),但有一个工具栏控件类CToolBar,所以我们如果要创建一个工具栏控件并显示在窗口里的话,只能用代码来完成,事实上任何一种控件,都可以用代码创 ...

  6. VC MFC工具栏(CToolBar)控件(转)

    工具栏 工具栏控件在控件面板里没有对应的选项(图标),但有一个工具栏控件类CToolBar,所以我们如果要创建一个工具栏控件并显示在窗口里的话,只能用代码来完成,事实上任何一种控件,都可以用代码创建, ...

  7. 原生JS实现全屏切换以及导航栏滑动隐藏及显示——重构前

    思路分析: 向后滚动鼠标滚轮,页面向下全屏切换:向前滚动滚轮,页面向上全屏切换.切换过程为动画效果. 第一屏时,导航栏固定在页面顶部,切换到第二屏时,导航条向左滑动隐藏.切换回第一屏时,导航栏向右滑动 ...

  8. SAP 设置屏幕字段的隐藏、显示、必填和可选,以设置物料组为例

    1.事务码MM01,把物料组设为选填字段. 2.找到物料组的屏幕字段. 3.在后台根据屏幕字段找到对应字段组.后台路径:后勤-常规—物料主数据—字段选择—给字段组分配字段.点击后面的箭头进入下一屏幕. ...

  9. HTML元素隐藏和显示

    在web前端开发过程中,经常会用到隐藏和显示元素的方法 总结:1.通过JS或Jquery控制          2.通过CSS样式控制 一.Js或jquery (jquery为例) 1.隐藏元素 使用 ...

随机推荐

  1. iOS CoreAnimation 核心动画

    一 介绍 一组非常强大的动画处理API 直接作用在CALAyer上,并非UIView(UIView动画) CoreAnimation是所有动画的父类,但是不能直接使用,应该使用其子类 属性: dura ...

  2. C++的简单“五子棋”游戏,只是核心代码,资源代码未添加

    ChessBoard.h #ifndef __CHESS_BOARD_H__ #define __CHESS_BOARD_H__ #include "DataStruct.h" # ...

  3. 如何Recycle一个SharePoint Web Application,以及为什么

    当你发现SharePoint服务器的CPU或者内存使用率居高不下的时候,很多人都会选择iisreset来让资源使用率降下来.但是在企业环境中,这毫无疑问会使这台服务器中断服务从而影响到用户的使用,所以 ...

  4. PHP写在线视频直播技术详解

    2016年7月22日 22:26:45 交流QQ:903464207 本文会不断更新 废话一句,如果你要做高性能服务器服务,请去读底层的东西 http tcp/ip socket 了解基础协议,你对如 ...

  5. URL转Drawable之 Android中获取网络图片的三种方法

    转载自: http://doinone.iteye.com/blog/1074283 Android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Applicatio ...

  6. CentOS 6安装PostgreSQL

    https://zh.wikipedia.org/wiki/PostgreSQL PostgreSQL是自由的对象-关系型数据库服务器(数据库管理系统),在灵活的BSD-风格许可证下发行.它在其他开放 ...

  7. QStriingList

    #include <QCoreApplication> #include<QDebug> #include<QStringList> int main(int ar ...

  8. CentOS 7 安装 nginx

    一.安装nginx依赖lib库: 1.yum install gcc-c++ -y 2.yum install pcre pcre-devel -y 3.yum install zlib zlib-d ...

  9. Warning C4819

    VC工程里有个文件,只有文件里写了汉字,就报警告C4819 Warning C4819:The file contains a character that can ot be represented ...

  10. .NET client connection Limit

    调试出了一个诡异的问题,使用多个进程没问题,单进程出现了. fix: //默认限制为2个连接 //public const int DefaultPersistentConnectionLimit = ...