MFC:基础篇 第三章 MFC消息映射机制

落花浮王杯 提交于 2020-03-17 08:58:51

一.简介

Windows应用程序的输入由Windows系统以消息的形式发送给应用程序的窗口.这些窗口通过窗口过程来接收和处理消息,然后把控制权还给Windows

 

 

二.消息的分类

1.队列消息和非队列消息

从消息的发送途径上看,消息分两种:队列消息和非队列消息

队列消息送到系统消息队列,然后到线程消息队列,最后送给目的窗口过程

非队列消息直接送给目的窗口过程

 

Windows维护一个系统消息队列(System message queue),每个GUI线程有一个线程消息队列(Thread message queue)

除了键盘 鼠标消息 WM_PAINT WM_TIMER WM_QUIT消息以外,其他消息大多数都是非队列消息

 

2.系统消息和应用程序消息

从消息来源来看,可以分为系统定义的消息和应用程序定义的消息

 

三.消息结构

typedef struct tagMSG{

  HWND hwnd,      // 接收消息的窗口句柄

  UINT messag,       // 消息标识(ID)

  WPARAM wParam,    // 第一个消息参数

  LPARAM lParam,    // 第二个消息参数

  DWORD time,      // 消息产生的时间

  POINT pt        // 消息产生时鼠标的位置

}MSG;

 

 

四.接收消息

while (GetMessage(&msg, NULL, NULL, NULL))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
return msg.wParam.

 

五.处理消息

应用程序通过窗口过程来处理消息

LRESULT CALLBACK MainWndProc{

  HWND hwnd,    // 窗口句柄

  UINT msg,      // 消息表示 

  WPARAM wParam,  // 消息参数

  LPARAM lParam   // 消息参数

}  

 

六.MFC消息映射

MFC主要处理三类消息:

(1) Windows消息 : 以 WM_ 开头的消息,除了 WM_COMMAND 消息例外

(2) 控制通知消息 : 是控制子窗口送给父窗口的 WM_COMMAND 通知消息

(3) 命令消息 : 这是来自菜单 工具条按钮 加速键等用户接口对象的 WM_COMMAND 通知消息

 

在类的头文件里面,增加消息处理函数的声明之外,添加一行声明消息映射的宏定义 DECLARE_MESSAGE_MAP

在类的源文件里面,实现消息处理函数之外,添加 BEGIN_MESSAGE_MAP() ... END_MESSAGE_MAP()

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!