VC++程序设计与应用--菜单工具栏与状态栏
Posted Abro.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VC++程序设计与应用--菜单工具栏与状态栏相关的知识,希望对你有一定的参考价值。
目录
前言
本篇文章介绍菜单、工具栏与状态栏
一、菜单、工具栏与状态栏
1.1 菜单
1.1.1 菜单的类型
常见菜单有3种:主菜单、弹出菜单和快捷菜单。
1.主菜单
指出现在应用程序主窗口或最上层窗口的菜单。通常对应有一个弹出菜单作为它的子菜单。
2.弹出菜单
指选择主菜单或一个菜单项时弹出的子菜单。
3.快捷菜单
当右击某个界面对象时,通常会弹出快捷菜单,它出现在鼠标箭头的位置,快速展示当前对象可用的命令功能。
菜单设计一般需要经过下面两步:
(1) 使用菜单编辑器编辑菜单资源;
(2) 使用ClassWizard进行消息映射,编辑成员函数,完成菜单所要实现的功能。
1.1.2 编辑菜单
使用菜单编辑器来编辑菜单资源。双击ResourceView视图中的Menu菜单资源,打开菜单编辑器。
1.插入新菜单项
- 在当前空白菜单项位置插入--选定窗口中的空白菜单项后按回车键(或双击空白菜单项),系统弹出菜单属性对话框。
- 在某菜单项前插入--选中该菜单项并按Ins键,再双击该空白菜单项进行编辑。
2.属性对话框的设置
用于输入菜单项的标识符(ID)、标题(Caption)和菜单项在状态栏上显示的提示(Prompt)信息等。
3.调整菜单项位置
选中某菜单项将其拖至适当位置。
4.删除菜单项
用鼠标单击菜单项或用上、下、左、右光标键选择菜单项,然后单击Cut按钮或按Del键删除。
1.1.3 建立消息映射
在上例中仅添加了菜单,并没有实现菜单的功能,即没有对应的命令处理函数与菜单项对应,因此,添加的菜单项是灰色的,即处于当前不可用状态。
添加新的菜单项后,还应该为菜单项指定一个处理函数,即利用ClassWizard类向导添加一个消息处理函数。
1.1.4 菜单的有效控制
一般情况下,菜单项都不止一种状态。
例如,在没有选择任何内容时,Edit菜单下的Copy、Cut等菜单项是无效的(灰色显示)。有时,我们还会看到,在菜单项旁边可能还会有检查标记,表示它是选中的还是不选中的。比如,在Word的视图菜单项下,当用户选用【网格线】或【标尺】时,相应菜单项前会出现一个“√”。
MFC通过消息映射机制和CCmdUI类更新菜单项的显示。
在类向导ClassWizard的Message Map标签中,如果选择一个菜单ID,在Messages列表框中就会出现以下两项:
COMMAND
UPDATE_COMMAND_UI
其中UPDATE_COMMAND_UI是更新命令用户接口消息,专门用于处理菜单项和工具条按钮的更新。
1.1.5 快捷菜单
为应用程序创建快捷菜单主要有以下两种方法。
1.使用Component Gallery创建快捷菜单
Component Gallery(组件画廊)是一个组件库,它保存着可以共享或重用的代码。这些代码包括由Visual C++自带的组件和从用户工程中增加到Gallery中去的用户自定义组件。
1.1.6 创建动态菜单
动态创建菜单分为以下3个步骤。
(1) 利用CreateMenu( )函数创建一个空的弹出式菜单,该函数的原型为:
HMENU CreateMenu()
该函数没有参数,它的返回值是一个菜单句柄。
(2) 调用AppendMenu( )或InsertMenu( )函数在菜单中加入菜单项。
(3) 调用函数SetMenu( )加载动态菜单。
1.1.7 创建基于对话框的菜单
从MFC的内容可知,利用MFC AppWizard[exe]向导工具可以生成基于对话框的应用程序。
基于对话框的应用程序在运行时并没有菜单栏。
下面我们通过实例来讨论如何给它创建一个菜单。
1.2 工具栏
在MFC中,工具栏的功能由类CToolBar实现。工具栏资源和工具栏类CToolBar是工具栏的两个要素。创建工具栏的基本步骤是:
- 创建工具栏资源;
- 构建一个CToolBar对象;
- 调用CToolBar::Create( )或CreateEx( )函数创建工具栏窗口;
- 调用CToolBar::LoadToolBar载入工具栏资源。
1.2.1 编辑工具栏
使用工具栏编辑器来编辑工具栏资源。双击ResourceView视图中的Toolbar工具栏资源,即可打开工具栏编辑器。
1.添加按钮
双击工具条上的空白按钮或单击空白按钮后,选择【View|Properties】菜单项,弹出如图所示的Toolbar Button Properties属性对话框,在此对话框中编辑按钮的标识符、宽度与高度值。
2.删除按钮
将按钮拖出工具栏外,即可删除该按钮。
3.编辑按钮位图
设置按钮位图有以下两种方法。
- 利用绘图工具与调色板直接进行绘制
- 先利用专用绘图软件制作,然后粘贴到按钮上
1.2.2 建立消息映射
通常,只需让一个按钮的ID值与同样功能菜单项的ID值相同即可。
如果按钮没有对应菜单项,则必须利用ClassWizard类向导添加一个消息处理函数。
1.2.3 自定义工具栏的操作
向导生成的标准工具栏的ID值为IDR_MAINFRAME。 对一些功能复杂的应用程序,需要创建多个不同的工具栏。生成工具栏的基本步骤:
(1)添加工具栏资源;
(2)参照MFC应用程序框架添加工具栏的方法,构造一个CToolBar类的对象,调用CToolBar::Create( )或CreateEx( )函数创建工具栏窗口;
(3)调用CToolBar::LoadToolBar( )函数载入工具栏资源。
1.创建工具栏窗口
调用CToolBar::Create( )或CreateEx( )函数创建并初始化工具栏窗口对象。若创建成功,函数返回TRUE,否则返回FALSE。
2.装载工具栏资源
调用LoadToolBar( )函数装载工具栏资源。用Create( )或者CreateEx( )函数创建工具栏,其实只是获得了一个窗口句柄,工具栏窗口中位图按钮的加载是靠LoadToolBar( )函数来完成的。若加载成功,将返回TRUE,否则返回FALSE。
3.设置工具栏风格
如果在调用初始化函数CToolBar::Create( )或者CreateEx( )时设置的工具栏风格不满足需要,可以再用SetBarStyle( )函数重新进行设置。
4.设置工具栏停靠特性
设置工具栏停靠特性,需要调用EnableDocking( )函数。既要调用CControlBar:: EnableDocking( )函数设置工具栏的停靠特性,还要调用框架类的成员函数EnableDocking( )函数来设置框架窗口以允许它的子窗口控制栏可以以何种方式停靠。不管一个框架窗口中有多少个子窗口控制栏,该函数只需调用一次。
5. 设置工具栏的初始停靠位置
通过调用CFrameWnd::DockControlBar( )函数定位一个工具栏的初始停靠位置。
6.移动工具栏
调用CFrameWnd::FloatControlBar( )函数来移动、定位一个工具栏。
7. 工具栏隐显控制
通过对函数CWnd::SetStyle( )的调用可以改变某些工具栏窗口的风格,但该函数不能改变WS_VISIBLE,只能通过父类CWnd的ShowWindow( )成员函数来显示或隐藏工具栏。
1.3 状态栏
状态栏实际上是一个窗口,一般分为几个窗格,每个窗格显示不同的信息。
使用AppWizard创建的单文档应用程序,接受默认选项时,生成的应用程序自动创建带有默认窗格的状态栏。
1.3.1 状态栏类的继承关系
在MFC中,状态栏的功能由CStatusBar类实现。
1.3.2 状态栏类的成员函数
1.3.3 状态栏操作
利用MFC AppWizard向导创建应用程序时,首先在CMainFrame类中定义一个成员变量m_wndStatusBar,它是状态栏类CStatusBar的对象。其次在MFC应用程序框架的实现文件MainFrm.cpp中,为状态栏定义一个静态数组indicators,如下所示:
static UINT indicators[ ]=
ID_SEPARATOR, //显示命令功能提示
ID_INDICATOR_CAPS, //显示大写锁定键状态
ID_INDICATOR_NUM, //显示数字锁定键状态
ID_INDICATOR_SCRL, //显示滚动锁定键状态
;
这个全局的提示符数组indicators中的每个元素代表状态栏上一个窗格的ID值,这些ID在应用程序的串表资源String Table中进行了说明。
通过增加新的ID标识来增加用于显示状态信息的窗格。状态栏显示的内容由数组indicators决定,需要在状态栏中显示的各窗格的标识符、位置以及个数也由该数组决定,状态栏显示的内容是可以修改的。
最后CWnd::Create( )函数以主框架窗口为父窗口创建状态栏,创建后默认停靠在主框架窗口的底部。CWnd::SetIndicators(indicators,sizeof(indicators)/sizeof(UINT))函数将创建后的状态栏分隔为sizeof(indicators)/sizeof(UINT)个窗格,窗格的ID分别为indicators数组中的元素值。
一个应用程序只有一个状态栏,所以对状态栏的操作主要是对状态栏上窗格的操作。
为了把一个窗格添加到默认的状态栏中,一般要完成下列步骤:
- 为新建窗格创建一个命令ID和默认字符串;
- 将该窗格的命令ID添加到状态栏的静态数组indicators中;
- 为该窗格创建一个命令更新处理程序。
总结
机会就像坐公交车,有人上车早,有人上车晚,有人直达车,有人要转车。只要你有决心去目的地,一定可以找到自己的路线!
以上是关于VC++程序设计与应用--菜单工具栏与状态栏的主要内容,如果未能解决你的问题,请参考以下文章