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

VC语言6.0程序设计从入门到精通-第13部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!




 ·46 ·  


…………………………………………………………Page 56……………………………………………………………

                                           第 3 章    菜单与加速键  



许一个还是多个对象处理该消息、允许哪些对象处理等。MFC 中采取了简单的方法,只允许 

其中一个对象处理该消息,当沿着消息传递路径找到第一个包含该消息的处理函数的对象时, 

则处理该消息,然后中断传递过程,不再搜索后续的对象。  

   由于命令消息可以被多种类的对象处理,因此命令消息的传递路径比较复杂,但总体思 

想是由子窗口到父窗口,由窗口到文档。下面举一个简单的例子。  

   假设是一个多文档 MDI 应用程序,用户触发了“编辑”菜单下的“粘贴”菜单项的命令 

消息,此时消息依照以下顺序传递。  

   (1)MDI 主框架窗口首先收到此命令消息。  

   (2 )主框架将处理命令的机会先让给其当前活动的 MDI 子框架窗口。  

   (3 )子框架窗口又将处理该命令的机会让给其活动的视图。  

   (4 )视图先搜索自己的消息映射,寻找对应的处理函数,如果没找到,则将消息传递给 

与其关联的文档,找到则调用并中止传递过程。  

   (5 )文档搜索自己的消息映射,寻找对应的处理函数。一般情况下文档中包含“粘贴” 

消息的处理函数,调用该处理函数完成粘贴功能。如果没有找到,文档将消息传递给文档模 

板。  

   (6 )文档模板进行相同的过程,如果没找到,将消息传递回子框架窗口。  

   (7 )子框架窗口搜索对应的处理函数,如果没找到,则将消息传回 MDI 主框架窗口。  

   (8 )如果主框架窗口中也没找到,则消息最后停留在应用对象,不再进行进一步的传递。  

   从上面的叙述可以看出,命令消息的传递过程很复杂。然而一般情况下不需要了解这么 

详细的消息传递路径,只需根据完成功能的要求,在相应的类中添加实现代码,就不会产生 

冲突,比如例子中提到的粘贴功能,一般就是由文档完成的,因此只需在文档类中添加这个 

命令消息的处理函数,而不必在别的类中添加与之冲突的处理函数。  



3。2    菜单和加速键的创建  



   在程序中使用菜单和加速键,首先需要创建相应的资源。菜单和加速键资源告诉Windows 

系统自动为程序绘制菜单,并将与菜单和加速键相关的用户操作作为命令消息发送给程序的 

窗体。资源的存在大大简化了程序的处理,是 Windows 系统程序设计的一个重要部分。  

   下面分别介绍菜单和加速键资源的创建过程。  



3。2。1    菜单的创建  



   实例 3…1 :创建菜单实例。源代码在光盘中“03实例 3…1test1 ”目录下。  



   1.创建工程  



   用 AppWizard 创建一个 MDI 工程,工程名为 test1 。  

   创建工程后,可以发现自动生成的应用程序框架中已包含了默认的菜单,根据用户在创 

建时的不同选项,默认菜单中的菜单项有所不同。对于 SDI 应用程序,只生成一个菜单,其 



                                                    ·47 ·  


…………………………………………………………Page 57……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通      



资源 ID 为 IDR_MAINFRAME  (资源ID 用于标识资源,程序装入资源需要指定该 ID 来确定 

需要装入哪个资源),这是整个应用程序共用的菜单。对于 MDI 应用程序,要生成两个菜单, 

其资源 ID 分别为 IDR_MAINFRAME 和 IDR_工程名 TYPE,当应用程序尚未打开文档时显 

示第一个菜单,打开文档后显示第二个菜单。  



    2 .添假菜单资源  



    添加菜单资源 。演示如何为资源 ID 为 IDR_MAINFRAME 的菜单资源添加一个包含“月 

光宝盒”和“仙履奇缘”两个子菜单项的“大话西游”菜单项。其步骤如下:  

    (1)在集成开发环境(IDE )中单击左侧工作区窗口中的“ResourceView ”选项卡,在 

树状列表中单击展开“Menu ”节点,找到需要编辑的菜单资源的  ID ,双击就可以打开该菜 

单资源的编辑界面,如图 3…4 所示。  



                                                                    



                             图 3…4    菜单资源编辑界面  



    (2 )双击    “帮助”菜单项右侧的虚线框,弹出新建顶层菜单项的属性编辑对话框,如 

图 3…5 所示。注意,这个虚线框可以用鼠标拖动到顶层菜单的任何位置。在“Caption ”文本 

框中输入菜单项的标题“大话西游(&D )”。标题中“&D ”的作用是在程序运行时用户可以 

按 Alt+D 组合键直接打开该菜单项,在显示时,“&D ”会自动转换为添加了下划线的“D ”, 

如图 3…6 所示。“Pop…up ”复选框默认被选中,表明这是一个弹出菜单项,允许有子菜单。  



                                                             



                           图 3…5    添加“大话西游”菜单项  



 ·48 ·  


…………………………………………………………Page 58……………………………………………………………

                                                                    第 3 章    菜单与加速键  



                                                            



                                图 3…6    “大话西游”菜单项  



     (3 )关闭如图 3…5 所示的对话框,单击资源编辑器中“大话西游”的菜单项,会显示它 

的下层菜单,如图 3…6 所示。因为还没有添加任何子菜单项,所以“大话西游”的下层菜单 

是空的,显示为一个虚线框。在图 3…6  中单击这个虚线框,弹出类似于图 3…5  的属性编辑对 

话框,如图 3…7 所示。  



                                                                        



                              图 3…7    添加“月光宝盒”菜单项  



     其中,在“ID ”文本框中输入“ID_MOVIE1 ”,“Caption ”文本框中输入“月光宝盒(&Y) ”, 

“Prompt ”文本框中输入“打开电影《大话西游之月光宝盒》”。标题中的“&Y ”表示打开“大 

话西游”菜单项后,在键盘上按“Y ”键可以直接选择“月光宝盒”菜单项。当鼠标光标移 

动到“月光宝盒”这个菜单项上时,会在程序的状态栏中显示“Prompt ”文本框中的内容, 

即“打开电影《大话西游之月光宝盒》”。回车关闭属性编辑对话框,保存修改。  

     (4 )按照步骤(3 )的方法加入菜单项“仙履奇缘”,其属性对话框如图 3…8 所示。  



                                                                        



                              图 3…8    添加“月光宝盒”菜单项  



     (5 )完成两个子菜单项的添加后,在资源编辑器中得到如图 3…9 所示的效果。  



                                                             



                          图 3…9    添加完成后的“大话西游”菜单项  



3。2。2    加速键的创建  



     键盘加速键是应用程序中定义的某些组合键,按下组合键可以快捷地选择相应的菜单项 



                                                                                  ·49 ·  


…………………………………………………………Page 59……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通      



和执行某些相应的操作。加速键可以和菜单项相关联,也可以定义某些菜单上没有提供的命 

令。例如 Visual C++ IDE  中复制和粘贴的快捷键分别是 Ctrl+C 和 Ctrl+V,这两个快捷键就是 

直接关联到 IDE  “编辑”菜单下的“复制”和“粘贴”菜单项。与菜单项的关联只需要将加 

速键的 ID 设置为对应菜单项的 ID,比如 Ctrl+C 的 ID 设置为 ID_EDIT_COPY 就可以关联到 

ID 同样是 ID_EDIT_COPY 的“编辑”菜单下的“复制”菜单项。  

    下面以在 3。2。1 节中创建的工程中添加加速键为例介绍添加加速键的方法。  

    (1)在集成开发环境(IDE )左侧单击“ResourceView ”选项卡,在树状列表中寻找 

“ 

 Accelerator ”节点下的“IDR_MAINFRAME ”子节点,单击该节点就会在右侧客户窗口中打 

开加速键资源 IDR_MAINFRAME  的加速键列表,如图 3…10 所示。IDR_MAINFRAME 加速 

键资源是 AppWizard 在创建应用程序时默认添加的,一般无需另外创建新的加速键资源。  

    (2 )双击编辑界面右侧客户区最下方的虚线框,打开一个加速键属性编辑对话框,如图 

3…11 所示,在该对话框中即可添加新的加速键。  

    在属性编辑对话框的“ID ”文本框中输入“ID_MOVIE1 ”,对应“大话西游”菜单项下 

的“月光宝盒”菜单项的  ID,输入完毕后“ID ”文本框会自动显示“ID_MOVIE1=数字”, 

这里数字表示 ID_MOVIE1 的数值,一般由 Visual C++ 自动给出,用户无需更改。  

    在“Key ”文本框中输入“Y ”,选中“Modifiers ”区域中的“Ctrl ”复选框,取消其他复 

选框的的选取,在“Type ”区域中选中“VirtKey ”单选框,表示使用虚拟键(Virtual Key )。    

    这样就建立起加速键 Ctrl+Y 和“月光宝盒”菜单项的对应 。程序运行后,只需按 Ctrl+Y 

键就可以选择“月光宝盒”菜单项,触发相应的命令消息了。  



                                                                   



                         图 3…10    加速键资源编辑界面  



 ·50 ·  


…………………………………………………………Page 60……………………………………………………………

                                                                 第 3 章    菜单与加速键  



                                                                     



                         图 3…11    “月光宝盒”加速键资源编辑界面  



    (3 )按照步骤(2 )中的方法,加入加速键 Ctrl+L  与“仙履奇缘”菜单项的对应,相应 

的属性对话框如图 3…12 所示。  



                                                                     



                         图 3…12    “仙履奇缘”加速键资源编辑界面  



    (4 )完成加速键的添加后,为了完善用户界面,需要在菜单项标题中添加加速键的说明。 

在 IDE 左侧的“ResourceView ”选项卡中,展开“Menu ”节点,双击 IDR_MAINFRAME 进 

入 IDR_MAINFRAME 菜单资源编辑界面。然后在 IDE 右侧客户区中单击“大话西游”菜单 

项,弹出子菜单,在“月光宝盒”菜单项上双击鼠标左键,弹出属性编辑对话框,将“Caption ” 

文本框中的标题修改为“月光宝盒(&Y)tCtrl+Y ”,如图 3…13 所示。其中“t ”表示“Ctrl+Y ” 

的显示与前面“月光宝盒(&Y) ”之间隔一个制表位(Tab )。  



                                                                     



                          图 3…13    添加“月光宝盒”的加速键说明  



    (5 )参照前一步,在“仙履奇缘”菜单标题中加上 Ctrl+L 的加速键说明。  



3。3    添加菜单所需处理函数  



    前一节介绍了创建和添加菜单资源的方法,但添加菜单资源只是创建菜单的第一步。用 

户编译执行前一节的例子就会发现,运行时关闭所有文档,程序显示的                                  IDR_MAINFRAME 

菜单中“大话西游”下的两个菜单项都是禁用的。这是因为缺少相应的用户处理函数,主框 



                                                                              ·51 ·  


…………………………………………………………Page 61……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通      



架类自动禁用了这两个菜单项。因此还需要为菜单消息添加消息处理函数。同时为了完善菜 

单的各种功能,还需要在运行中动态地创建和修改菜单,并添加代码。本节将详细讲解这些 

        

内容。 



3。3。1    添加普通菜单的处理函数  



    1.添加菜单命令处理函数  



    由 AppWizard 创建的应用程序会在程序运行时自动将菜单资源装入内存 。用户只需要添 

加相应消息处理函数即可完成菜单的基本功能。下面以  3。2  节中创建的菜单为例,分步骤讲 

解如何为应用程序添加菜单命令消息处理函数。  

    (1)在 IDE 主菜单栏中依次选择“View|ClassWizard ”菜单命令或者在 IDE 界面中直接 

使用快捷键 Ctrl+W 打开“ClassWizard ”对话框,单击“Message Maps ”选项卡。  

    (2 )添加“月光宝盒”菜单项的消息处理函数。在“Class  name ”下拉列表框中选择需 

要编辑的类—主框架类 CMainFrame,在“Object IDs ”列表框中选择需要添加处理函数的 

命令消息 ID—ID_MOVIE1  “月光宝盒”,双击“Messages ”列表框中的 MAND 或者 

在其上单击鼠标左键,然后单击“Add Function ”按钮,为 ID_MOVIE1 添加命令消息处理函 

数。在弹出的如图        3…2 所示的对话框中直接单击“OK ”按钮(对话框中函数名为默认的 

OnMovie1 ),返回 ClassWizard 对话框。可以看见在“Member  functions ”列表中已经添加了 

一个名为 OnMovie1 的新函数。  

    (3 )按照步骤(2 )中的方法,为 ID  为 ID_MOVIE2  “仙履奇缘”的菜单项添加消息处 

理函数 OnMovie2() 。添加后的 ClassWizard 对话框内容如图 3…14 所示。  



                                                                     



               图 3…14    添加了两个命令消息处理函数后的 ClassWizard 对话框  



    (4 )在“Member functions ”列表框中选择函数 OnMovie1,单击“Edit Code ”按钮,  关 

闭 ClassWizard 对话框,自动打开 MainFrm。cpp 文件,并将光标定位在 OnMovie1()函数体中, 



 ·52 ·  


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