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()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)