友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

VC语言6.0程序设计从入门到精通-第22章

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






        ON_MAND(ID_FILE_OPEN; CWinApp::OnFileOpen)  



        // Standard print setup mand  



        ON_MAND(ID_FILE_PRINT_SETUP; CWinApp::OnFilePrintSetup)  



    END_MESSAGE_MAP()  



    MFC AppWizard 生成的应用程都已经自动包含消息映射的代码,但用户也可以在源程序 

中手动添加。同时 Visual C++另一个强大的工具 ClassWizard 也提供了处理消息映射表的自动 

化机制。当然,ClassWizard 只能够生成类和消息处理的框架,包括创建消息处理函数的声明, 

而具体的实现代码还需要用户去补充。  

    在类中,消息处理函数都是类的成员函数 。当程序要对一个消息进行响应时,消息映射 

机制就会自动调用该函数。用 ClassWizard  添加消息处理函数时,会自动添加以下 3 部分内 

容:  

    o  在类的定义中添加该消息处理成员函数的函数声明;  

    o  在类的消息映射表中加入相应的消息映射表项;  

    o  在类的实现中加入该消息处理成员函数的函数实现。  

    注意  ClassWizard  添加的函数实现中,只是一个不能完成任何操作的空函数框架,还需 

要加入具体的实现代码。但当用户手动添加消息处理函数时,也必须添加上述 3 部分内容。  

    对于标准 Windows 消息,在 CWnd 类中已经预定义了默认的处理函数,有确定的函数名, 

一般以    On  开头,以消息名为函数名的后半部分,例如                      WM_PAINT    消息的处理函数为 

OnPaint(),WM_CREATE 消息处理函数是 OnCreate() 。这些预定义的消息处理函数根据消息 

的不同有不同的参数和返回值。  

    对于控件通知消息和命令消息,一般没有默认的消息处理函数,可以由用户自定义。MFC 

建议这类函数命名应遵循一些约定,一般以 On  开头,函数名中应包含该消息的简要说明, 

              ClassWizard 在创建这类消息处理函数时会提供一个建议的函数名,一般无需 

方便阅读代码。 

修改。例如 OnFileOpen()函数表明处理命令标识符 ID_FILE_OPEN 的命令消息。  

    本章和以后的章节都将主要利用  ClassWizard  为程序添加消息处理函数。因此下面简要 

介绍一下 ClassWizard 对话框,如图 3…1 所示。在 IDE 主菜单栏中选择“View|ClassWizard ” 

菜单命令,或者在开发环境的界面中直接按快捷键 Ctrl+W,即可打开“MFC  ClassWizard ” 

对话框。选择“Message Maps ”的选项卡,即可进行编辑消息映射的设置。  



 ·44 ·  


…………………………………………………………Page 54……………………………………………………………

                                                 第 3 章    菜单与加速键  



                                                          



                      图 3…1    消息映射选项卡  



ClassWizard 对话框的“Message Maps ”(消息映射)选项卡中的各项功能介绍如下:  

o  Project (工程)下拉列表框:用于选择需要编辑的工程名称。  

o  Class  name (类名)下拉列表框:用于选择需要编辑消息映射的类的名称。选择好类 

  后,在该下拉列表框  和“Project ”下拉列表框的下一行将显示所选类的头文件和源文 

  件路径。  

o  Object IDs (对象ID )列表框:以列表形式显示可以产生消息的对象的 ID,包括菜单 

  项、按钮等的 ID 。该列表框的第一项总是显示所选择的类。  

o  Messages  (消息)列表框:列举在“Object IDs ”列表框中选定的对象所能产生的各种 

  消息。  

o  Member functions  (成员函数)列表框:以列表形式显示选定的类中的成员函数。该列 

  表框中只列出与消息处理函数以及           MFC  中与消息处理有关的虚函数。前者标记为 

  “W ”,并在函数名后显示对应的消息映射宏;后者标记为“V ”。  

o  Add  Class (添加类)按钮:单击该按钮,添加新的类到工程中。该按钮在“MFC  

  ClassWizard ”对话框中的所有选项卡中都存在。  

o  Add  Function (添加函数)按钮:单击该按钮添加选定消息的新的消息处理函数,包 

  括在消息映射定义中添加对应的宏指令,在选定的类中添加该消息处理函数的声明和 

  完成基本功能的代码实现。如果选定的消息已经有消息处理函数,则该按钮无效。对 

  于对象产生的消息,单击该按钮将弹出如图 3…2 所示的对话框,要求用户输入消息处 

  理函数的名称,在“Member function name ”(成员函数名称)输入框中输入函数名, 

  确定后  ClassWizard  就会自动添加该消息处理函数。对于由该选定的类产生的消息, 

  MFC  已经定义好了消息处理函数名称,单击“Add Function ”按钮将直接添加该消息 

  处理函数,不会提示用户输入自定义的函数名。注意,只有单击“MFC ClassWizard ” 

  的“OK ”按钮或者“Edit Code ”按钮退出“MFC ClassWizard ”对话框后,ClassWizard 

  才会真正修改源文件。  



                                                           ·45 ·  


…………………………………………………………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 ·  


…………………………………………
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!