"Visual C++ MFC编程实例教程的第三章主要讲解了消息处理机制,包括窗口消息、命令消息和控件通知,以及消息的发送和寄送方式。本章介绍了MFC类如何通过消息来实现窗口间的通信,并讨论了消息处理的过程。
在MFC中,消息处理是窗口类和应用程序内核之间交互的关键。三种主要的消息类型是窗口消息、命令消息和控件通知。窗口消息通常涉及到窗口生命周期中的事件,如创建、移动或销毁。命令消息通常与用户交互有关,如菜单项的选择或按钮的点击。控件通知是控件向其父窗口发送的事件通知,如选择列表框的一项或文本框的更改。
消息的传递有两种方式:发送(Sent)和寄送(Posted)。发送消息是直接调用窗口的窗口进程,通信是实时的,发送函数会等待窗口进程完成处理后返回。而寄送消息则是将消息放入应用程序的消息队列,待应用程序空闲时处理,这可能导致通信的延迟。
发送消息适合于需要立即响应的情况,而寄送消息通常用于非关键操作,以确保当前的鼠标和键盘事件优先处理。例如,鼠标和键盘事件通常会被自动寄送。开发者应该尽可能地发送消息,除非有特定需求希望在所有输入事件处理完毕后再执行某动作。
在MFC中,发送消息通常涉及以下步骤:
1. 获取接收消息的CWnd类对象的指针,这可能是通过成员函数或者全局函数如`FindWindow`得到。
2. 使用CWnd类提供的`SendMessage`或`PostMessage`函数发送消息。`SendMessage`用于发送消息并等待返回值,而`PostMessage`则将消息放入消息队列后立即返回。
3. 构造一个`WM_COMMAND`或`WM_NOTIFY`结构,包含消息的详细信息,如消息ID和额外的数据。
4. 调用`SendMessage`或`PostMessage`函数,传入接收窗口的句柄、消息类型和消息参数。
在MFC中,窗口类通过`OnMessage`函数处理消息,这是通过消息映射机制实现的。消息映射允许开发者指定特定消息的处理函数,这样当消息到达时,相应的处理函数就会被调用。
本章还探讨了重定向消息的方法,这对于处理自定义消息或在多个类之间共享消息处理逻辑是很有用的。重定向可以通过消息映射中的`ON_MESSAGE`宏实现,将消息处理转发给其他类的成员函数。
理解MFC的消息处理机制对于开发高效且响应性强的Windows应用程序至关重要。通过熟练掌握消息发送和处理,开发者可以更好地控制用户界面的响应和应用程序的流程。