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

一.简介

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()

 

转载于:https://www.cnblogs.com/k5bg/p/11214592.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值