### MFC消息处理详解 #### 6.1 消息分类 **6.1.1 消息结构** 在Windows操作系统中,消息是应用程序与操作系统交互的重要方式之一。消息通过一个名为`MSG`的结构体来传递,这个结构体包含了消息的所有相关信息。以下是`MSG`结构体的具体定义: ```cpp typedef struct tagMSG { HWND hwnd; // 接收消息的窗口句柄 UINT message; // 消息标识符 WPARAM wParam; // 额外的消息参数1 LPARAM lParam; // 额外的消息参数2 DWORD time; // 消息发送的时间 POINT pt; // 光标位置 } MSG; ``` - **hwnd**: 表示接收此消息的窗口的句柄。 - **message**: 一个无符号整型数值,表示消息的类型,通常是预定义的常量。 - **wParam** 和 **lParam**: 这两个参数携带了与消息相关联的附加信息,具体内容取决于消息类型。 - **time**: 表示消息被创建的时间。 - **pt**: 指示消息被发送时光标的位置。 在实际的MFC编程中,通常只需要关注`wParam`和`lParam`这两个参数即可,因为它们包含了处理消息所需的大部分信息。 **6.1.2 队列消息与非队列消息** 根据消息是否需要经过消息队列来区分,可以将消息分为队列消息和非队列消息。 1. **队列消息**:这类消息由Windows系统放入每个应用程序的消息队列中,然后由应用程序的消息循环取出并分发给相应的窗口处理程序。典型的队列消息包括但不限于鼠标和键盘输入消息(如`WM_KEYDOWN`, `WM_MOUSEMOVE`),以及其他系统消息(如`WM_PAINT`, `WM_TIMER`, `WM_QUIT`)。 2. **非队列消息**:这些消息不通过消息队列,而是直接发送给目标窗口的过程。例如,当调用`UpdateWindow`时,会直接向窗口发送`WM_PAINT`消息;调用`DestroyWindow`时,则会发送`WM_DESTROY`消息。 **6.1.3 系统消息与自定义消息** - **系统消息**:Windows定义了一系列预设的消息ID,这些消息ID覆盖了操作系统与应用程序交互的常见场景。例如,`WM_CREATE`用于窗口创建,`WM_DESTROY`用于窗口销毁。 - **自定义消息**:为了扩展Windows消息机制,允许开发者定义自己的消息ID。自定义消息ID的范围是`WM_USER`(0x0400)至0x7FFF或0xC000至0xFFFF。其中,`WM_USER`至0x7FFF范围的消息供应用程序内部使用,而0xC000至0xFFFF范围的消息则用于应用程序之间的通信。为了确保消息ID的唯一性,可以通过`::RegisterWindowMessage`函数来注册自定义消息。 **6.1.4 窗口消息** 窗口消息主要用于处理与窗口管理相关的事情,比如窗口的创建、绘制、移动、销毁等操作。这些消息主要由操作系统生成并发送给对应的窗口过程(window procedure)。常见的窗口消息包括但不限于: - **WM_CREATE**: 当创建一个新的窗口时发送。 - **WM_DESTROY**: 在销毁窗口之前发送。 - **WM_PAINT**: 当需要重绘窗口时发送。 - **WM_SIZE**: 当窗口大小改变时发送。 - **WM_MOVE**: 当窗口位置改变时发送。 这些消息为应用程序提供了必要的手段来控制窗口的行为和外观,是实现窗口应用程序不可或缺的一部分。 接下来的章节将进一步探讨如何在MFC中处理这些不同类型的消息,以及如何编写消息映射来响应特定消息。
- 粉丝: 4
- 资源: 16
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助