按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
基础知识。
即使是Microsoft Windows的临时用户也知道,在应用程序的主窗口
的顶部会出现一个菜单条,在Windows 95中,Microsoft还提示使用
对象的上下文菜单。用户所需要做的,简单到只需要轻轻单击一下鼠
标右键就可以了。(在后面的程序设计中,我们会看到,要是你觉得
使用双击右键更有意思的话,作出这种改变几乎没有什麽更多的工
作。)同时,我们也会向你展示实现图符菜单的简单方法。在该节的
最后,我们还会介绍如何对系统菜单进行操作。
加速器是这样的一个按键,程序负责将这一按键解释成一个命令,从
用户程序的角度看,在菜单选择与加速器按键的选择并没有什麽差
别,这是通过Windows为二者生成相同的消息决定的。对于程序员来
说,将加速键显示在相应菜单的右侧是一个良好的习惯,它为熟练用
户提供了进行更方便选择提供了一种可能性。但是从程序设计的角度
看二者却是分别定义的………菜单是用菜单资源定义的,而加速键是用
加速键资源定义的。
工具条是第三种命令输入机制。工具条是一个带有按钮的窗口,它使
用户发出命令的动作节省到在相应按钮上按一下鼠标即可。当然,由
于工具条本身也要占据屏幕空间,因此,放在工具条上的命令应该是
最常用的。而且,出于对用户的尊重,在用户不希望使用它的时候,
应该能将工具条隐去。AppWizard 自动创建的工具条提供这种能力,
但我们会对此作出更详细的解释。
在本章的最后,我们会对一些在Windows下常用的控件,比如滑块控
件,进度条以及上下控件的一些基础知识。总得来说,我们准备在本
章中介绍如下知识:
…………………………………………………………Page 203……………………………………………………………
l 菜单消息响应
l 快捷键消息响应
l 工具条消息响应
l 对上下控件、进度条、以及轨道消息响应
第一节 菜单消息响应
在程序接口中,我们最常用的选择方式就是用菜单进行选择。而对于
从程序员来说,我们所要做的很大一部分工作,就是对程序的输入进
行响应。无庸置疑,菜单可以有多种实现的方式。从用户的使用角度
来说,当然希望可以有多种多样的选择。我们常常建立下拉菜单,也
可以建立一些必要的图符菜单,当然在必要的时候,我们业应该建立
一种使用上更便捷的上下文菜单。而在很多情况下,我们希望对菜单
进行动态的操作――在许多时候,这甚至是一种很重要的事情,对在
我们下面的章节中也会有所提及。
从下面开始,我们将按以下的顺序对菜单消息的响应进行讲解。
让我们先看看怎样在资源编辑器中实现菜单。
首先新建一个基于单文档界面的程序,这只需要在AppWizard新建程
序的第一步(如图5。1)中在Application Type选择时选择Single
document即可。
图5。 1 建立单文档界面程序:Step1
…………………………………………………………Page 204……………………………………………………………
我们设该应用程序的名称为Menu。同时,由于是首次建立不是基于对
话框的程序,我们简单的说一下建立的过程。(基于对话框的程序
AppWizard只需要四步,而基于文档的程序需要六步。)
在第二步(如图5。2所示)中,我们将设定数据库支持,由于我们现在
建立的只是简单的单文档程序,我们选择不需要任何数据库支持。
在第三步 (如图5。3所示)中,我们将设定生成的标准程序中的文档
支持。AppWizard提供有容器类 (Container)与服务类 (Server)应用,
我们保持缺省设置。(不需要容器类与服务类支持,但保留ActiveX
Control控件支持。)
图5。 2 建立单文档界面程序Step 2
图5。 3 建立单文档界面程序Step 3
…………………………………………………………Page 205……………………………………………………………
在第四步(如图5。4)中;我们去除掉打印预览及打印支持。但我们保持
工具条,状态条,三维控制支持。对刚使用的文件列表数设置为四。
在第五步(如图5。5)中,我们将设定是否设置提示及怎样使用MFC库。
在刚开始时,我们设定需要提示,同时,动态链接MFC库。
在最后一步中(如图5。6)中,我们将设定AppWizard将要为我们生成的
类。
图5。 4 建立单文档界面程序Step 4
图5。 5 建立单文档界面程序Step 5
这样,我们就建立起一个具有Document/View结构的简单的应用程
序。
…………………………………………………………Page 206……………………………………………………………
在进行进一步的编程以前,我们希望你能对照在第四章中对基本框架
的解释,对产生的其它文件 (MenuDoc和MenuView)我们将在第六章中
作详细的解释,现在读者要是理解得不大清楚,可以先跳过去这一部
分。在作进一步的编程之前,建议读者先将AppWizard生成的程序编
译,运行,看看AppWizard都为我们实现了什麽功能。
图5。 6 建立单文档界面程序Step 6
下面我们对程序的菜单作一些修改。
图5。 7 菜单资源IDR_MAINFRAME0
图5。 8 菜单资源IDR_MAINFRAME1
…………………………………………………………Page 207……………………………………………………………
图5。 9 系统菜单
如图5。7所示;为我们的程序运行菜单的一个画面。该菜单的属性为
IDR_MAINFRAME0
而下面的两个图片为我们的应用程序运行时的另外一组菜单。该菜单
的属性为IDR_MAINFRAME1。
在程序中;我们的改变了Help和Draw菜单;如图5。8所示。
最后;我们改变了系统菜单;并改变了其中的一个选项的功能。如图5。9
所示。
作为补充;下面我们看一下程序所实现的绘图以及系统菜单被改变后
实现的功能(如图5。10所示)。
图5。 10 程序的一个运行画面 (系统菜单中新增菜单被选择)
我们认为;通过第四章中基于对话框的程序以后;读者应该已经掌握了
实现菜单的修改的方法;但为了下面描述的方便;我们在此列出各菜单
项的属性。
l 注意:
…………………………………………………………Page 208……………………………………………………………
l 下面的代码摘自菜单完成后的文件Menu。rc中(该文件以文本形式
保存;可以用写字板或者记事板打开。为了更清楚地理解下面的代
码,我们粗略的讲解一下菜单资源的语法:
关键字POPUP表明其后的BEGIN与END之间的为其弹出式子菜单
的内容。
关键字MENUITEM标识一具体的子菜单内容。MENUITEM后所跟
的第一部分为 菜单标题,其最后一部分则为标识该菜单项的
ID号。需要注意的是,具有子菜单的弹出式菜单项是没有标
识的ID号的。
l 我们程序的最初的菜单;并不包含程序执行后结果的一些菜单;最
初的菜单中仅仅包含前四幅图中的菜单。
l IDR_MAINFRAME0 MENU PRELOAD DISCARDABLE
l BEGIN
l POPUP 〃&File〃
l BEGIN
l MENUITEM 〃&NewtCtrl+N〃; ID_FILE_NEW
l MENUITEM 〃&Open。。。tCtrl+O〃; ID_FILE_OPEN
l MENUITEM 〃&SavetCtrl+S〃; ID_FILE_SAVE
l MENUITEM 〃Save &As。。。〃; ID_FILE_SAVE_AS
l MENUITEM SEPARATOR
l MENUITEM 〃&Print。。。tCtrl+P〃; ID_FILE_PRINT
l MENUITEM 〃Print Pre&view〃; ID_FILE_PRINT_PREVIEW
l MENUITEM 〃P&rint Setup。。。〃; ID_FILE_PRINT_SETUP
l MENUITEM SEPARATOR
l MENUITEM 〃Recent File〃; ID_FILE_MRU_FILE1; GRAYED
l MENUITEM SEPARATOR
…………………………………………………………Page 209……………………………………………………………
l MENUITEM 〃E&xit〃; ID_APP_EXIT
l END
l POPUP 〃&Edit〃
l BEGIN
l MENUITEM 〃&UndotCtrl+Z〃; ID_EDIT_UNDO
l MENUITEM SEPARATOR
l MENUITEM 〃Cu&ttCtrl+X〃; ID_EDIT_CUT
l MENUITEM 〃&CopytCtrl+C〃; ID_EDIT_COPY
l MENUITEM 〃&PastetCtrl+V〃; ID_EDIT_PASTE
l END
l POPUP 〃&View〃
l BEGIN
l MENUITEM 〃&Toolbar〃; ID_VIEW_TOOLBAR
l MENUITEM 〃&Status Bar〃; ID_VIEW_STATUS_BAR
l MENUITEM 〃&Long menu〃; ID_VIEW_LONGMENU
l END
l POPUP 〃&Draw〃
l BEGIN
l MENUITEM 〃&Line〃; ID_DRAW_LINE
l MENUITEM 〃&Circle〃; ID_DRAW_CIRCLE
l MENUITEM 〃&Rectangle〃; ID_DRAW_RECTANGLE
l MENUITEM 〃&Bitmap〃; ID_CHANGE
l END
…………………………………………………………Page 210……………………………………………………………
l POPUP 〃&Help〃
l BEGIN
l MENUITEM 〃&About Menu。。。〃; ID_APP_ABOUT
l END
l END
l
l IDR_MAINFRAME1 MENU DISCARDABLE
l BEGIN
l POPUP 〃&File〃
l BEGIN
l MENUITEM 〃&NewtCtrl+N〃; ID_FILE_NEW
l MENUITEM 〃&Open。。。tCtrl+O〃; ID_FILE_OPEN
l MENUITEM 〃&Sa