• 1. 第7章 MFC消息映射与消息传递机制Windows系统是以消息为基础,以事件来驱动的操作系统,了解操作系统的消息传递机制是很有必要的,本章将进一步剖析MFC的消息映射机制及命令传递机制,探讨发送给窗口的消息是如何被MFC框架,通过窗口句柄映射表和消息映射数组来用窗口类的处理函数进行响应的。
  • 2. 7.1 消息概述Windows系统对每一个输入事件都产生一个消息,例如按下鼠标的左键时会产生一个WM_LBUTTONDOWN消息。应用程序也可以调用Windows函数使得操作系统给应用程序发送消息,例如调用CreateWindow()函数创建窗口时,就会向窗口发送一个WM_CREATE消息。Windows系统也可以给应用程序发送消息,例如定时时间到时,系统会发送WM_TMER消息。应用程序也可以产生自己的消息,并将它们发送给其他应用程序。
  • 3. 7.1.1 队列消息和非队列消息从消息的发送途径上看,消息可以分为队列消息和非队列消息两种。其中队列消息送到系统消息队列,然后到线程消息队列中,而非队列消息直接送给目的窗口过程。 1.队列消息 2.非队列消息
  • 4. 7.1.2 系统消息和应用程序消息从消息的来源来看,可以分为系统定义的消息和应用程序定义的消息。 1.系统消息 2.应用程序消息
  • 5. 7.1.3 窗口消息、命令消息和控件通知根据处理函数和处理过程的不同,MFC框架的消息大致可以分为窗口消息、命令消息和控件通知消息三大类。下面介绍一下每类消息的产生、格式以及相应的响应过程。 1.窗口消息 2.命令消息 3.控件通知消息
  • 6. 7.2 MFC消息映射机制MFC利用ClassWizard来帮助实现消息映射,ClassWizard会在源码中添加一些消息映射的内容,并声明和实现消息响应函数,现在通过一个单文档类型的应用程序来分析MFC框架的消息影射机制。
  • 7. 7.2.1 MFC消息处理所谓消息映射,就是把Windows系统的各种消息映射到MFC类库的成员函数上的一种机制。简单地讲,就是让程序员指定要某个有消息处理能力的MFC类来处理某个消息。MFC提供了帮助工具ClassWizard来实现消息映射,在处理消息的类中添加一些有关消息映射的内容,并添加一些处理消息的成员函数。程序员将完成消息响应函数,实现所希望的消息处理能力。
  • 8. 7.2.2 一个应用程序的消息映射分析下面通过一个示例来分析消息映射,该示例主要实现鼠标左键消息的响应,即当按下鼠标左键,应用程序的视图类会捕获到鼠标左键按下消息,并对该消息进行响应,来弹出一个消息框。
  • 9. 7.2.3 MFC消息映射的实现方法通过挖掘应用程序的源代码,读者可以发现MFC使用ClassWizard帮助实现消息映射时,在源代码中添加了三处与鼠标左键按下消息有关的代码。 1.消息响应函数原型 2.消息映射的实现 3.消息响应函数的实现
  • 10. 7.2.4 消息映射宏的种类在消息响应函数实现的代码中,定义完ON_WM_LBUTTONDOWN宏之后,还定义了一些带参数的ON_COMMAND宏,虽然两种宏的格式截然不同,但都是用于初始化消息映射数组。究其原因,原来MFC根据消息的不同和消息处理方式的不同,把消息映射划分成若干类别。常用的宏一般分为以下几类。 1.窗口消息宏 2.命令消息宏 3.控制通知消息宏 4.用户界面接口宏 5.自定义消息宏
  • 11. 7.3 小结本章首先介绍了消息的一般种类,然后通过一个单文档类型的应用示例来进一步挖掘MFC框架的消息映射机制,知道了消息是如何把相关信息放入消息映射数组中,并和相应得响应函数产生关联。最后介绍了几种常用的消息映射宏。