VC 显示 隐藏 工具栏 状态栏
显示或者隐藏工具栏和状态栏
这里讨论显示或者隐藏工具栏、状态栏的操作,以及工具栏、状态栏被显示/隐藏时,相关的两个菜单项ID_VIEW_STATUS_BAR、ID_VIEW_TOOLBAR的状态更新。这两个菜单命令及对应的状态更新命令是标准命令消息所包含的。MFC边框窗口实现了菜单命令消息的处理和菜单项状态的更新。
CFrameWnd提供了OnBarCheck来响应与ID_VIEW_STATUS_BAR、ID_VIEW_TOOLBAR菜单项对应的命令。
消息映射:
ON_COMMAND_EX(ID_VIEW_STATUS_BAR, OnBarCheck)
ON_COMMAND_EX(ID_VIEW_TOOLBAR, OnBarCheck)
这里,使用了扩展命令消息映射宏把ID_VIEW_STATUS_BAR和ID_VIEW_TOOLBAR命令映射给同一个函数OnBarCheck处理。
OnBarCheck函数的实现:
BOOL CFrameWnd::OnBarCheck(UINT nID)
{
ASSERT(ID_VIEW_STATUS_BAR == AFX_IDW_STATUS_BAR);
ASSERT(ID_VIEW_TOOLBAR == AFX_IDW_TOOLBAR);
//得到工具条或者状态条
CControlBar* pBar = GetControlBar(nID);
if (pBar != NULL)
{
//若控制条可见,则隐藏它;否则,显示它
ShowControlBar(pBar, (pBar->GetStyle() & WS_VISIBLE) == 0, FALSE);
//处理完毕
return TRUE;
}
//可以让下一个命令目标继续处理
return FALSE;
}
由于是扩展映射宏定义的消息处理函数,所以OnBarCheck函数有一个UINT类型的参数和一个BOOL返回值。
当用户从“View”菜单选择打了钩的“Toolbar”时,消息处理函数OnBarCheck被调用,参数就是菜单项的ID号ID_VIEW_TOOLBAR,它等于工具条的子窗口IDAFX_IDW_TOOLBAR。处理结果,工具条被隐藏;当再次选择该菜单项则工具条被显示。
处理状态条的过程类似于工具条的处理。
ShowControlBar是CFrameWnd的成员函数,参数1表示控制条对象指针,参数2表示显示(TRUE)或者隐藏(FALSE),参数3表示是立即显示(FALSE)或者延迟显示(TRUE)。
如果工具条或者状态条被隐藏,则相应的菜单项ID_VIEW_STATUS_BAR 或者ID_VIEW_TOOLBAR 变成uncheked(菜单项被标记为没有选择),否则,checked(菜单项被标记选择)。CFrameWnd实现了这两个菜单项的状态更新处理,列举其中一个如下:
声明处理ID_VIEW_TOOLBAR的状态更新消息:
ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR, OnUpdateControlBarMenu)
函数的实现:
void CFrameWnd::OnUpdateControlBarMenu(CCmdUI* pCmdUI)
{
ASSERT(ID_VIEW_STATUS_BAR ==
AFX_IDW_STATUS_BAR);
ASSERT(ID_VIEW_TOOLBAR == AFX_IDW_TOOLBAR);
CControlBar* pBar = GetControlBar(pCmdUI->m_nID);
//存在工具栏
if (pBar != NULL)
{
//工具条窗口被显示则checked,被隐藏则uncheked
pCmdUI->SetCheck((pBar->GetStyle() & WS_VISIBLE) != 0);
return;
}
pCmdUI->ContinueRouting();
}
GetControlBar是CFrameWnd的成员函数,用来返回边框窗口的指定ID的控制条对象(指定ID是控制条的子窗口ID)。
泊位和漂浮
工具条可以泊位在边框窗口的任一边(上、下、左、右),或者漂浮在屏幕上的任何地方。
实现泊位的方法
首先,边框窗口调用CFrameWnd::EnableDocking函数使控制条泊位在边框窗口中有效,指明在边框窗口的哪边接受泊位。如果想在任何边都可以泊位,则使用参数CBRS_ALIGN_ANY。
然后,工具条调用ControlBar::EnableDocking使泊位对工具条有效,如果在调用ControlBar::EnableDocking时指定的泊位目的边和边框窗口能够泊位的边不符合,那么工具条不能泊位,它将漂浮。
最后,边框窗口调用CFrameWnd::DockControlBar泊位工具条。
泊位后形成窗口层次关系
边框窗口、泊位条、工具条的包含关系如下:
边框窗口
泊位条1
工具条1
工具条2
…
泊位条2
…
边框窗口包含1到4个泊位条子窗口,每个泊位条包含若干个控制条子窗口。
泊位的实现
CFrameWnd::EnableDocking指定哪边接受泊位,则为泊位准备一个泊位条。泊位条用CDockBar描述,派生于CControlBar。如果指定任何边都可以泊位,则创建四个CDockBar对象和对应的HWND窗口。然后,调用ControlBar::EnableDocking在对应的泊位条内安置工具条。
MFC设计了CDockBar类和CFrameWnd的一些函数来实现泊位,具体代码实现在此不作详细讨论。
实现漂浮工具条的方法:
边框窗口调用FloatControlBar实现工具条的漂浮。
漂浮的实现:
首先,创建一个微型漂浮边框窗口,该边框窗口有一个泊位条。
然后,在微型边框窗口的泊位条内放置工具条。
MFC设计了微型边框类CMiniFrameWnd,在此基础上派生出微型泊位边框窗口类CMiniDockFrameWnd。CMiniDockFrameWnd增加了一个CDockBar类型成员变量m_wndDockBar,即泊位条。
在CMiniDockFrameWnd对象被创建时,创建泊位条m_wndDockBar。泊位条m_wndDockBar的父窗口如同CMiniDockFrameWnd的父窗口一样,是调用FloatControlBar的边框窗口,而不是微型泊位边框窗口。微型边框窗口和泊位条创建完成之后,调用ControlBar::DockControlBar泊位工具条在CMiniDockFrameWnd窗口。
文章出处:DIY部落(http://www.diybl.com/course/3_program/c++/cppjs/200834/102726_10.html)
VC 显示 隐藏 工具栏 状态栏相关推荐
- Eclipse自定义设置显示隐藏工具栏toolbar
Eclipse通过此方法可以自定义设置显示隐藏工具栏toolbar. 具体案例如下: 在Java Perspective界面解决消失的debug工具栏: 打开Window ->Customize ...
- 工具栏,状态栏(VC_MFC)
目录 工具栏 状态栏 (本章节中例子都是用 VS2005 编译调试的) 工具栏 [对话框][单/多文档] 相关类: CToolBar , CToolBarCtrl 对话框 相关函数: ...
- html 状态栏显示,网页屏蔽状态栏 打开的网页怎么隐藏浏览器的状态栏
打开网页,状态栏不显示怎么办 网页浏览器的状态栏不见了怎么弄出来? 答;在网页浏览器里最上端,"查看"菜单下点击工具栏,勾选状态栏它就出来了 .如果还不行,那就试试重置IE浏览器. ...
- setSystemUiVisibility() 与 getSystemUiVisibility() 显示隐藏状态栏
Android 4.4 Camera 源码里面有一个操作界面的方法: [java] view plaincopy /** * If {@param visible} is false, this ...
- Android全屏显示隐藏状态栏
1,概论 工作中经常需要用到全屏的页面,还要隐藏系统状态栏或沉浸式 2,设置全屏 2.1,设置有代码中设置,也有Mainfest.xml中设置theme 2.2,要是全局生效就在application ...
- echarts工具栏增加自定义按钮显示隐藏其他按钮(更多操作)
项目中遇到一个需求,要求再echarts toolbox工具栏增加自定义按钮来隐藏显示其他按钮,因为此部分资料较少,耗了不少时间,这里分享给大家. 效果图: 其实关键的就是改变按钮属性后要重新渲染一次 ...
- android输入法隐藏状态栏,android 输入法设置显示隐藏
Android是一个针对触摸屏专门设计的操作系统,当点击编辑框,系统自动为用户弹出软键盘,以便用户进行输入. 那么,弹出软键盘后必然会造成原有布局高度的减少,那么系统应该如何来处理布局的减少?我们能否 ...
- 如何将word中的对象怎么显示到工具栏_职场必备!Word实用技巧最全总结(五)...
1. 用目录快速定位 目录通常是长文档不可缺少的部分,有了目录,阅读者就能很容易地知道文档中有什么内容,如何查找这些内容.下面介绍使用内部标题样式创建目录的方法: 1.单击要建立目录的地方,通常是文档 ...
- excel中显示隐藏的行_在Excel中显示或隐藏用户提示
excel中显示隐藏的行 When you set up a worksheet for other people to use, data validation messages can help ...
最新文章
- 【AI战略】2019年美国国家人工智能战略报告(中文翻译版)
- 【信息抽取】介绍一种端到端的关系抽取方法
- bat 启动 不弹出对话框_CAD中转换出的PDF文件模糊要怎么办
- 手把手教学,平衡小车详细教程,平衡车
- 算法与数据结构(六):堆排序
- 微软SQLHelper.cs类 中文版
- Commons-Collections4 集合工具类的使用(一):集合操作
- 单片机蜂鸣器编程音乐_单片机系统硬件调试方法
- 【springmvc】传值的几种方式postman接口测试
- 关于微信服务号使用百度地图获取定位不准问题
- “1+7+N”改革工作体系介绍
- 关于sigmoid函数几点介绍
- caution: filename not matched:xxx
- Java - GC是什么?为什么要有GC?
- r导入txt乱码_R中导入excel乱码的解决办法
- 破解帐户后,黑客重现如何榨干用户的最终价值
- SincNet 原始波形的说话人识别
- 本地文件上传FTP或远程目录
- 极智AI | 全场景算力产品矩阵 看算能系列AI产品
- accept的阻塞与非阻塞
热门文章
- 什么是DCS系统?DCS和SCADA的区别
- 全国计算机三级网络技术电子版,全国计算机三级网络技术最新版笔试电子教材(完全免费版).doc...
- 基于asp.net181艺术品在线交易系统
- 求1!+2!+...+10!的值
- 希望计算机专业都知道这些优质比赛
- [MSDN版本][32bit/64bit]Windows 2003 R2 With Sp2[中/英][标准/企业/数据中心]
- 怎么定义电子商务,电子商务这个词是如何进入大众视线的?
- 【转】深入理解 TLB 原理
- linux查看某个nas盘io,nas(网络附加存储)与san知识解释
- 基于MATLAB的说话人识别系统