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

 

posted @   言午丶  阅读(274)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示