孙鑫C++教程留下来的作业--如何让工具栏在原来隐藏的位置出现
--加油,不仅仅是口号!
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++教程留下来的作业--如何让工具栏在原来隐藏的位置出现的更多相关文章
- 孙鑫MFC学习笔记9:状态栏与工具栏编程
1.在窗口创建之前就应该修改窗口的样式 2.单文档应用程序会把文档名作为应用程序标题,应该去掉FWS_ADDTOTITLE属性,然后修改lpszName为标题 3.在窗口创建完成后,可以通过SetWi ...
- 孙鑫VC学习系列教程
教程简介 1.循序渐进 从Win32SDK编程开始讲解,帮助大家理解掌握Windows编程的核心 -- 消息循环机制. 2.通俗易懂 编程语言枯燥难懂,然而通过孙鑫老师形象化的讲解,Windows和M ...
- 孙鑫VC学习笔记:多线程编程
孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Modified ...
- 孙鑫视频学习:VS2010中找不到【Tab order】菜单项
在学习孙鑫视频中,修改Tab顺序时,找不到VC6.0中提到的[Layout]->[Tab order]菜单项,但VC2010中可以用Ctrl+D调出来Tab顺序,或者[格式]->[Tab键 ...
- 孙鑫视频学习:改变窗口过程函数中出现error C2440错误的解决方法
在Visual Studio 2010中,即使代码是完完全全按照孙鑫视频中的敲,也会在出现error C2440,这是因为开发平台由VC6.0升级至VS2010,需要将原有的项目迁移.VS2010对消 ...
- 孙鑫视频学习:关于Visual Studio 2010中MFC工程的消息WM_INITDIALOG找不到的问题
学习孙鑫的那个深入详解C++视频时,有一处给编辑框空间改写窗口过程函数的例子,其中需要添加一个WM_INITDIALOG消息响应函数,但在类向导的消息栏下找不到WM_INITDIALOG消息.解决方法 ...
- 孙鑫VC++视频教程笔记
写在前面的话:在学习孙鑫老师的VC++视频时,为了加深自己对知识的深入理解,就做了下面的笔记. 第一讲: 第二讲: 第三讲: 第四讲: 第五讲: 第六讲: 第七讲: 第八讲: 第九讲: 第十讲: 第十 ...
- 孙鑫视频VC++深入详解学习笔记
孙鑫视频VC++深入详解学习笔记 VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Le ...
- 孙鑫VC++视频教程(1-20课全)
孙鑫VC++视频教程(1-20课全)PPT讲义和源代码 http://down.51cto.com/data/467760 孙鑫VC++从入门到精通开发详解视频教程[20讲] http://down. ...
随机推荐
- TestFlight
链接: 如何使用TestFlight进行Beta测试 [转]TestFlight APP测试(IOS如何让上架前给其他人测试) 转]TestFlight APP测试(IOS如何让上架前给其他人测试) ...
- php 时间加减
<?php date_default_timezone_set('PRC'); //默认时区 echo "今天:",date("Y-m-d",time() ...
- AngularJS中的模板安全与作用域绑定
欢迎大家指导与讨论 : ) 一.前言 摘要:指令compile.$sce.作用域绑定.$compileProvider和其他资源安全设置.本文是笔者在学习时整理的笔记,由于技术还不够高,如果本章中有错 ...
- Python-08-Socket
1. Python 网络编程 Python 提供了两个级别访问的网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接 ...
- 9个让人印象深刻的网站 JS 视觉效果
网页设计已经提升到一个整体新的水平,Flash 渐渐失去了地位,逐渐被 HTML/JavaScript/CSS 所超越,而且一样可以实现出 Flash 复杂的特效. 本文介绍 8 个让人印象深刻的网站 ...
- 一个 -100.01 的double 在内存中怎么存储的. 一个中文String 在内存中占多少直接 utf-8 / GBK
一.-100.01 的double 在内存中怎么存储的 double双精度数据类型存储格式IEEE 双精度格式为8字节64位,由三个字段组成:52 位小数 f : 11 位偏置指数 e :以及 1 位 ...
- Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询
在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...
- 关于select那点事
select: 通过监视多个文件描述符的数组.当select()返回后 文件描述符便会被内核修改标志位,使进程 能进行后续操作 ------------------------------------ ...
- Git从入门到学会
Git简介 Git是什么? Git和SVN一样都是一种高效的管理代码的系统. Git是目前世界上最先进的分布式版本控制系统(没有之一). 创建版本库 什么是版本库呢?版本库又名仓库,英文名reposi ...
- please wait while windows configures microsoft visual studio professional 2013 [转载]
2016年5月30日 VS3013安装update 2以后,打开offie出现"please wait while windows configures microsoft visual s ...