VC 显示 隐藏 工具栏 状态栏
来源:互联网 发布:宝洁八大问 答案 知乎 编辑:程序博客网 时间:2024/05/21 09:04
显示或者隐藏工具栏和状态栏
这里讨论显示或者隐藏工具栏、状态栏的操作,以及工具栏、状态栏被显示/隐藏时,相关的两个菜单项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 显示 隐藏 工具栏 状态栏
- VC++6.0 创建 显示 隐藏 工具栏 状态栏(新增部分内容)
- 6.15--如何编程 显示或隐藏 控制栏(工具栏、状态栏)?
- VC如何隐藏工具栏
- VC中隐藏与显示CDockPane,工具栏,菜单栏
- 显示隐藏工具栏
- 为每个VC设置自己的状态栏隐藏与显示
- iOS显示隐藏状态栏
- 工具栏的显示和隐藏
- VC++工具栏与状态栏的动态生成
- 孙鑫vc++第九讲 状态栏 工具栏 进度条
- VC++中添加工具栏和状态栏
- 图解VC++工具栏和状态栏编程实例
- VC工具栏,可拖动,并在被隐藏的地方显示
- 程序隐藏状态栏全屏显示
- 动态显示和隐藏状态栏
- 动态显示和隐藏状态栏
- 状态栏的显示和隐藏
- HP-SNMP的开发流程
- 自定义公式的计算处理
- 當您執行 SQL SELECT 陳述式具有 UNION 子句和 ORDER BY 子句時,收到錯誤訊息
- (转)一份比较详细的DOS命令说明!
- Web服务配置错误: allowDefinition='MachineToApplication' 错误和 客户端发现响应内容类型为“text/html; charset=utf-8”...
- VC 显示 隐藏 工具栏 状态栏
- 兔子是怎样吃掉狼的?
- 什么是IT咨询?IT外包又是什么?
- Milton 1.5.1发布,开源服务器端类库
- 让UNION与ORDER BY并存于SQL语句当中
- 安装或更新到IE8后, VS2008 向导出现的Add Variable等等问题的 解决办法
- DelTree(删除到回收站)
- 背下这148句话,你可以提高一个档次了,不止在文学方面
- php(gd库)输出中文图像的转换函数