友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

C语言实例教程(PDF格式)-第25部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 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 〃&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  



l MENUITEM 〃E&xit〃; ID_APP_EXIT  



l END  


…………………………………………………………Page 211……………………………………………………………

l POPUP 〃&View〃  



l BEGIN  



l MENUITEM 〃&Toolbar〃; ID_VIEW_TOOLBAR  



l MENUITEM 〃&Status Bar〃; ID_VIEW_STATUS_BAR  



l MENUITEM 〃&Normal menu〃; ID_VIEW_NORMALMENU  



l END  



l POPUP 〃&Dyncmodify〃  



l BEGIN  



l MENUITEM 〃&Insert a menuitem〃; ID_DYNCMODIFY_INSERT  



l MENUITEM 〃&Delete a menuitem〃; ID_DYNCMODIFY_DELETE  



l MENUITEM 〃&Append a menuitem〃; ID_DYNCMODIFY_APPEND  



l MENUITEM 〃&Modify help〃; ID_DYNCMODIFY_MODIFY  



l MENUITEM 〃M&odify system menu〃; ID_DYNCMODIFY_MODIFYSYSTEMMENU  



l MENUITEM 〃&Reset system menu〃; ID_DYNCMODIFY_RESET  



l END  



l POPUP 〃&Help〃  



l BEGIN  



l MENUITEM 〃&About Menu。。。〃; ID_APP_ABOUT  



l END  



l END  



l   



l IDR_CONTEXTMENU MENU DISCARDABLE  



l BEGIN  


…………………………………………………………Page 212……………………………………………………………

  l POPUP 〃dummy〃  



  l BEGIN  



  l MENUITEM 〃&Line〃; ID_DRAW_LINE  



  l MENUITEM 〃&Circle〃; ID_DRAW_CIRCLE  



  l MENUITEM 〃&Rectangle〃; ID_DRAW_RECTANGLE  



  l END  



  l END  



    



                                             



                    图5。 11 上下文菜单的一个运行画面  



为了建立弹出式菜单,在上述代码中,我们发现还有一个菜单 

IDR_CONTEXTMENU没有提及。它在该文件中与其它菜单的表现形式是 

一样的。下图为弹出式菜单的一个运行画面。  



下面我们看看怎样改变菜单项的缺省名称。如图5。12所示,在 

WorkSpace中于IDR-MAINFRAME上右击鼠标,在弹出式菜单中选择属 

性项 (Property),在接下来的属性设置对话框中在ID设置区输入后 

者从下拉列表选择所需的菜单ID号即可。依此处理其它各菜单项。  



  l 注意:  



  l 菜单项ID号的设置务请同我们给 出的保持一致,由于ID号是辨识 

    菜单消息的唯一手段,此处的差别将会导致你在下面的学习过程 

    中将不得不跟我们给 出的代码有一些差异。  


…………………………………………………………Page 213……………………………………………………………

                                          



                          



                  图5。 12 改变菜单项ID值  



现在,试着运行一下我们的程序,会发现它并没有能比最初的 

AppWizard建立的标准程序多做些什么。这是必然的,毕竟,我们还 

没有编写一行让它动起来的代码吗 !不过不要紧,我们接下来所要做 

的,就是这项工作。(不用担心IDR_MAINFRAME0对IDR_MAINFRAME的 

替代会有什么不良结果,实际上,ClassWizard监测到这些,并已在 

程序代码中作了相应的变动以反应这一变化。)  



首先,由于对菜单的动态改变在菜单IDR_MAINFRAME1的菜单项中实 

现,因此,我们所要做的第一步工作
返回目录 上一页 下一页 回到顶部 1 1
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!