--加油,不仅仅是口号!

BEGIN----------------------------------

将工具栏进行停靠。当隐藏后再次点击出现的时候它出现在工具栏顶部了,并没有停靠在原来的位置,如何解决呢?

--虽然我们可以用这个函数简单地解决以上的问题:

--ShowControlBar(&m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE);

--相信会有不少那些精益求精的不懈追求者

最开始本来使用的是MoveWindow()这个函数,结果发现无法将原来浮动的工具栏移到顶部工具栏区域之外--为什么会这样?因为工具栏此时已经被设定处于停靠

状态了,所以我们要将它浮动起来,这就需要另外一个函数FloatControlBar()。

void FloatControlBar( CControlBar * pBar, CPoint point

point

The location, in screen coordinates, where the top left corner of the control bar will be placed.

下面添加我确认可行的代码:

 void  CMainFrame::OnNewtoolbar()
{
// TODO: 在此添加命令处理程序代码
static CRect rect;
static BOOL Isfloat=false;
CPoint point;
if(m_newToolBar.IsVisible())
{
if(Isfloat=m_newToolBar.IsFloating());//使工具栏消失前获取它是否浮动
{
m_newToolBar.GetWindowRect(&rect);//工具栏是浮动的就获取它的位置
}
m_newToolBar.ShowWindow(SW_HIDE);
RecalcLayout();
DockControlBar(&m_newToolBar);
}
else
{
m_newToolBar.ShowWindow(SW_SHOW);
if(Isfloat)//工具栏消失之前是浮动状态调用下面代码
{
point.x=rect.left;
point.y=rect.top-rect.Height();//根据测试发现移动后的Y坐标多了一个等于工具栏的高度的值
FloatControlBar(&m_newToolBar,point);//调用这个函数使工具栏呈现浮动状态并且移动到point处
}
else
{
RecalcLayout();
DockControlBar(&m_newToolBar);
}
}
}

对于第23行减去rect.Height()的问题,我觉得可能是FloatControlBar()函数的问题,因为rect获取的是屏幕的参数,我们需要移动的位置也是相对于屏幕的位置,其中不应该

涉及到屏幕到客户区的转换。欢迎对此能够做出解释的人给我留言!

孙鑫C++教程留下来的作业--如何让工具栏在原来隐藏的位置出现的更多相关文章

  1. 孙鑫MFC学习笔记9:状态栏与工具栏编程

    1.在窗口创建之前就应该修改窗口的样式 2.单文档应用程序会把文档名作为应用程序标题,应该去掉FWS_ADDTOTITLE属性,然后修改lpszName为标题 3.在窗口创建完成后,可以通过SetWi ...

  2. 孙鑫VC学习系列教程

    教程简介 1.循序渐进 从Win32SDK编程开始讲解,帮助大家理解掌握Windows编程的核心 -- 消息循环机制. 2.通俗易懂 编程语言枯燥难懂,然而通过孙鑫老师形象化的讲解,Windows和M ...

  3. 孙鑫VC学习笔记:多线程编程

    孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modified ...

  4. 孙鑫视频学习:VS2010中找不到【Tab order】菜单项

    在学习孙鑫视频中,修改Tab顺序时,找不到VC6.0中提到的[Layout]->[Tab order]菜单项,但VC2010中可以用Ctrl+D调出来Tab顺序,或者[格式]->[Tab键 ...

  5. 孙鑫视频学习:改变窗口过程函数中出现error C2440错误的解决方法

    在Visual Studio 2010中,即使代码是完完全全按照孙鑫视频中的敲,也会在出现error C2440,这是因为开发平台由VC6.0升级至VS2010,需要将原有的项目迁移.VS2010对消 ...

  6. 孙鑫视频学习:关于Visual Studio 2010中MFC工程的消息WM_INITDIALOG找不到的问题

    学习孙鑫的那个深入详解C++视频时,有一处给编辑框空间改写窗口过程函数的例子,其中需要添加一个WM_INITDIALOG消息响应函数,但在类向导的消息栏下找不到WM_INITDIALOG消息.解决方法 ...

  7. 孙鑫VC++视频教程笔记

    写在前面的话:在学习孙鑫老师的VC++视频时,为了加深自己对知识的深入理解,就做了下面的笔记. 第一讲: 第二讲: 第三讲: 第四讲: 第五讲: 第六讲: 第七讲: 第八讲: 第九讲: 第十讲: 第十 ...

  8. 孙鑫视频VC++深入详解学习笔记

    孙鑫视频VC++深入详解学习笔记 VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Le ...

  9. 孙鑫VC++视频教程(1-20课全)

    孙鑫VC++视频教程(1-20课全)PPT讲义和源代码 http://down.51cto.com/data/467760 孙鑫VC++从入门到精通开发详解视频教程[20讲] http://down. ...

随机推荐

  1. shell脚本仅列出当前目录下的文件及文件夹

    #!/bin/bash function ergodic(){ ` # do # "/"$file ] # then # ergodic $"/"$file # ...

  2. 轻量级DAO层实践初体验

    最近快被 Hibernate 给坑哭了,有了自己动手实现 ORM 映射 DAO 的冲动. 工作之余折腾了快一星期,总算是有点小成就. 现打算将过程记录下来,方便自己后续回顾填补遗漏. 1. 传统 JD ...

  3. JS系列——Linq to js使用小结

    前言:前面几篇介绍了下C#基础技术中的几个:反射.特性.泛型.序列化.扩展方法.Linq to Xml等,本来还有两三个知识点没有写完,比如委托.多线程.异步等,后面会陆续将它们补起来,以便作为一套完 ...

  4. Django登录访问限制 login_requeired

    作用: 1. 用户登录之后才可以访问某些页面 2. 如果没登录,跳转到登录页面 3. 用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地址 要实现这个需求很简单就是在相应的view前面使用装 ...

  5. 一行python代码实现树结构

    树结构是一种抽象数据类型,在计算机科学领域有着非常广泛的应用.一颗树可以简单的表示为根, 左子树, 右子树. 而左子树和右子树又可以有自己的子树.这似乎是一种比较复杂的数据结构,那么真的能像我们在标题 ...

  6. MongoDB基础知识

    一.Mongodb简介 Mongodb是基于分布式文件存储的数据库,用C++编写: Mongodb是nosql(not-only-sql)数据库: Mongodb '无状态模式',不用去设计,直接用, ...

  7. resin启动报错:guava-15.0.jar!/META-INF/beans.xml:5: <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"> is an unexpected top-level tag. 异常

    项目完成,经过本地的测试,最后在部署的时候,发现服务器resin启动失败,报错信息如下:

  8. 关于解决asp.net mvc网站页面Banner图片即时更换css里背景图片url相对路径问题的新方案

    最近在网站首页上想将Banner壁纸给做到后台上传随时更改的效果.遇到问题便是:将上传的图片路径动态添加到首页css代码中,结果尝试了网上提供的思路,更改相对路径,换为url中“../../Conte ...

  9. Win+Ctrl键设置

    转载:http://www.win7u.com/jc/9156.html Ctrl+V:这是Win10命令提示符里新增的, Win+Prt Sc:屏幕截图.按下该快捷键后,Win8系统教程.你知道wi ...

  10. deepin 15.3添加PPA源 安装php5.6

    想要在deepin 15.3上安装PHP5.6,我们需要手动添加源. 在https://launchpad.net/+search?field.text=php上可以通过搜索找到你想要的软件源, PP ...