八宝书库 > 文学其他电子书 > VC语言6.0程序设计从入门到精通 >

第14部分

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

小说: VC语言6.0程序设计从入门到精通 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!





…………………………………………………………Page 55……………………………………………………………

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



                                                      



                        图 3…2    添加消息处理函数的对话框  



    o  Delete Function  (删除函数)按钮:单击该按钮删除选定消息的消息处理函数,包括函 

     数的声明和定义该消息映射的宏语句。如果选定的消息没有消息处理函数,则该按钮 

     无效。注意,当该函数已经存在于源文件中时,单击该按钮会提示如图 3…3 所示的对 

     话框,告诉用户  ClassWizard    只能删除该函数的声明和定义该消息映射的宏语句,而 

     无法删除该函数的实现代码,用户需要手动删除。  



                                                                   



                    图 3…3    提示用户手动删除消息处理函数的对话框  



    o  Edit Code  (编辑代码)按钮:单击该按钮退出“MFC ClassWizard ”对话框,同时 IDE 

      的代码编辑窗口直接转到选定消息的处理函数进行编辑。该按钮也使得在“MFC  

     ClassWizard ”中所做的更改生效。如果选定的消息没有消息处理函数,则该按钮无效。  

    o  OK (确定)按钮:单击该按钮使得在“MFC ClassWizard ”中的编辑生效,并退出“MFC  

     ClassWizard ”对话框。  

    o  Cancel  (取消)按钮:单击该按钮取消所有“MFC ClassWizard ”对话框中的设置,并 

     退出“MFC ClassWizard ”对话框。  



3。1。3    消息处理过程  



    在 Windows  程序设计中,消息的处理是通过消息循环进行接收与分发的。MFC  运用消 

息映射机制封装了这一处理过程。下面介绍 MFC 中消息的处理过程。  



    1.标准 Windows 消息和控件通知消息  



    标准 Windows 消息和控件通知消息的处理过程比较简单。这类消息必须由 CWnd 或其派 

生类的对象处理,消息传递到封装对应的窗口或子窗口的类的对象中。也就是说,当关闭程 

序的时候,会产生一个 WM_CLOSE 消息并通知主框架类,主框架类调用相应的处理函数进 

行程序关闭前的清理操作,如保存文件和数据等。  



    2 .命令消息  



    命令消息与其他两个类型的消息不同,它可以由应用程序其他类的对象(例如应用类对 

象、文档对象和文档模板对象)处理。这就涉及一个消息传递路径的问题,具体来说就是允 



 ·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 所示。  



                                                                     



                 

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的