用消息映射处理消息循环

C++消息映射与处理源码详解 在Windows操作系统中,消息系统是构建应用程序界面的基础。它负责在系统、应用程序及其组件之间传递指令和数据。消息系统的核心是基于消息队列和消息循环机制的,允许系统和应用程序响应各种事件,如用户输入、系统通知或其他软件触发的事件。消息系统涉及到几个关键概念,包括消息(Messages)、消息队列(Message Queues)、消息循环(Message Loops)以及窗口过程(Window Procedures),这些概念构成了Windows编程的核心。 阅读详情

     为一个vc程序添加一个事件,那么平台会自动生成时间处理的函数,我们只需要在里面加代码就可以了。比如添加WM_LButtondown大家都知道windows程序是事件驱动,每一个事件都需要一个函数来与之对应,也就是通过消息循环在消息队列中来检测事件,然后通过回调函数来处理这一事件。

    那么MFC是如何链接到这一事件的呢?它是通过消息映射来实现的。

    在每个能处理消息的类中,定义一个消息和消息响应函数的静态对照表,叫做消息映射表;当有消息时,只需要查找该映射表,通过这个消息找到响应函数(一个函数指针),那么就调用了该消息处理函数。

    Cwnd中有一个WindowProc函数,可以到WinCore.cpp中找到,它是一个虚函数。这一步涉及到较深的MFC源代码,有待进一步分析。

    MFC为什么要这么设计呢? 一个消息可以通过一个个类层次向下传递从而找到这个响应函数,因为每个窗口都是用CWnd继承的,这个继承层次很深。那么这个层次中所有的类都加上消息处理函数, 每个子类都要重写这个响应函数,这是不可能的。从效率方面考虑,因为Cwnd中的WindowProc是一个虚函数,那么它的子类中都必须要维护一个虚函数表vtable,这个继承很深,无论子类是否重写这个虚函数,每个类都要有这个虚函数表,占用了大量的内存,严重影响了效率。

掌握Windows API中的消息映射机制 消息映射机制是软件开发中用于处理程序内部事件和外部输入的一种机制。理解这一机制,对于设计响应式和交互式应用程序至关重要。Microsoft Foundation Classes(MFC)提供了一个丰富的类库,用于创建基于Windows的应用程序。在MFC框架中,消息映射是一个核心概念,它将Windows消息与特定的处理函数关联起来。MFC的消息处理机制允许开发者不必直接处理底层的Win32 API调用,而是通过预定义的消息映射机制来响应事件和消息。 阅读详情

相关推荐

Mac 环境配置jdk、Maven

3、终端打开配置jdk时候建好的脚本文件: open -e .bash_profile。4、查看maven是否安装成功和系统能不能识别maven/mvn命令:⬇️。输入⬇️并保存: 其中第一行JAVA_HOME替换为自己下的jdk路径。,安装编译好的二进制版本,具体安装zip还是tar.gz我看的。5、查看jdk是否安装成功和系统能不能识别java命令:⬇️。至此,我的Mac系统的环境配置jdk、Maven完成!然后就发现我的maven命令还是没作用,不识别,下载后直接安装即可,很快,点几下就OK了。

weixin_42416791的博客 4389

MFC消息映射机制详解

Windows程序和MFC程序是靠消息驱动的,他们对于消息的处理本质上是相同的。只是Windows程序对于消息处理的过程十分清晰明了,MFC程序则掩盖了消息处理的过程,以消息映射的方式呈现在开发者面前,使得开发消息的处理十分简单。用多了mfc就想对它的消息映射机制有一个本质的了解,下面将对消息映射做详细的分析。当然,在分析MFC消息映射之前首先对Windows程序的消息处理过程进行一个简单的描述。

Ocean2006的专栏 1万+

幸狐RV1106开发板实战:5分钟搞定Yolo8模型部署(附避坑指南)

本文详细介绍了在幸狐RV1106开发板上快速部署YOLOv8模型的实战流程。通过RKNN-Toolkit2工具链,将ONNX模型转换为RV1106 NPU专用的RKNN格式,并完成交叉编译与上板运行。文章重点分享了环境搭建、模型转换的关键步骤以及常见的避坑指南,帮助开发者高效实现边缘AI目标检测应用。

weixin_28677451的博客 912

MFC消息机制 & Qt消息机制 解析

MFC消息机制 VS Qt消息机制

zhangchuan7758的博客 3109

基于ROS2 Humble与Livox Mid-360的双雷达点云融合实战解析

本文详细解析了基于ROS2 Humble与Livox Mid-360的双雷达点云融合实战方案。从环境搭建、驱动安装、双雷达配置、外参标定、时间同步到点云融合核心实现,全面介绍了技术要点与避坑指南,并提供了工程化部署与性能优化建议,助力开发者高效实现高精度点云合成应用。

ss78901的博客 1093

FPGA数字下变频实战:用Vivado DDS IP核实现IQ采样与频率校正(附MATLAB仿真对比)

本文提供了一份基于Vivado DDS IP核实现FPGA数字下变频(DDC)的完整工程指南。详细阐述了IQ采样的原理、DDC链路构建、DDS频率校正的工程实现,并重点介绍了如何利用MATLAB搭建黄金参考模型进行全链路仿真与对比验证,分享了关键的调试技巧与性能优化建议。

t1u2v的博客 810

消息映射的实现 [转]

Windows消息概述  Windows应用程序的输入由Windows系统以消息的形式发送给应用程序的窗口。这些窗口通过窗口过程来接收和处理消息,然后把控制返还给Windows。   消息的分类     队列消息和非队列消息   从消息的发送途径上看,消息分两种:队列消息和非队列消息。队列消息送到

beyond8820的专栏 1075

初学树莓派——(九)DHT11数据传入ONENET

目录 前言 DHT11实现本地温湿度监测 DHT11.py 接线图 效果图 温湿度数据上传至ONENET 新建产品 新建设备 ONENET.py 测试 Shell脚本配置 效果图 前言 本文分部分实现温湿度上传至OneNet云平台,本地数据监测,数据上传 新建一个文件夹,文件夹内包含DHT11.py、ONENET.py、tmp_data.txt、hum_data.txt DHT11实现本地温湿度监测 DHT11.py import RPi.GPIO as GPIO

会点灯的大力水手的博客 2611

MFC消息映射BEGIN_MESSAGE_MAP详解

MFC的消息映射对于对开发者处理消息可谓十分方便。MFC类继承众多,虚函数表占内存大导致微软直接不采用虚函数方式。发现《VC++深入详解》只大概说了消息映射的原理,没有详细介绍其实现,所以写篇小文章探究下。 一、首先在使用消息映射之前,必须先声明DECLARE_MESSAGE_MAP() DECLARE_MESSAGE_MAP()是个宏定义,对应的源码为: #define DECLARE_MESSAGE_MAP() private: static const AFX_MSGMAP_...

顺其自然~专栏 5459

Istio ICA考试之路---2-2

找到dr部分,这部分可以在mirroring里找也可以和题2-1一样在Traffic Management的dr里复制,内容都一样。此题之后都是在cluster-2上操作,所以就不需要再切换了.之后的几题2.1节就忽略掉了。可以看到,80%的流量被镜像到了dev上,实际考试这步可以忽略。看到ex-ip是192.168.126.220。获取gw,把gateways加入到vs配置中。获取istio-ingress的ex-ip。就获得了这样一个模板文件。查看2个pod的日志。

Q先生 853

StarRC常见问题整理

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?使用starrc_cmd “错误代码”就能看对应Error或Warnning的解释。

m0_61544122的博客 3116

解码MFC消息映射机制

Windows程序和MFC程序是靠消息驱动的,他们对于消息的处理本质上是相同的。只是Windows程序对于消息处理的过程十分清晰明了,MFC程序则掩盖了消息处理的过程,以消息映射的方式呈现在开发者面前,使得开发消息的处理十分简单。用多了mfc就想对它的消息映射机制有一个本质的了解,下面将对消息映射做详细的分析。当然,在分析MFC消息映射之前首先对Windows程序的消息处理过程进行一个简单的描述。

qq_20341867的专栏 957

【零基础入门unity游戏开发——2D篇】SpriteEditor图片编辑器

【零基础入门unity游戏开发——2D篇】SpriteEditor图片编辑器

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2327

windows的消息机制总结

DOS靠过程来驱动,而windows靠消息驱动。 MFC/QT是一个广泛使用的变成类库,对windows的消息机制进行了很好的封装。 1、消息的概念: 消息是指windows操作系统发给应用程序的一个通告,告诉程序某个特定的事件发生了。比如用户点击鼠标,会引发相关的消息,并交给相应的程序去处理。最终处理消息的是应用程序的窗口函数,如果程序不负责处理的话,系统会作出默认的处理。 从数据结构的...

Jacoob1024的博客 7848

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VC++如何处理自定义消息

<br />在SDK编程中,对消息的获取与分发是通过消息循环来完成。而在MFC编程中则是通过采取消息映射的方式对其进行处理。相比而言,这样的处理方式要简单得多,这也是符合面向对象编程中尽可能隐含实现细节的原则。一个完整MFC消息映射包括对消息处理函数的原型声明、实现以及存在于消息映射中的消息入口。一般情况下出了对自定义的消息响应外,对于标准Windows消息的映射处理可以借助ClassWizard向导来完成。<br /> <br />自定义消息可分为四步:<br /> <br />第一步:定义消息。开发Wi

chaozi2008的专栏 843

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Windows(MFC)消息映射

消息映射是MFC应用程序的运行核心,Windows系统以消息的形式把输入传递给应用程序的窗口过程,窗口通过窗口过程来接收和处理消息,并把控制返回Windows系统。   1. 消息结构    消息是一个将事件和数据结合起来的集合。MSG结构含有来自windows应用程序消息队列的消息信息。 typedef struct tagMSG {     HWND        h

leolewin的博客 933

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

VC----MFC消息映射机制详解

Windows程序和MFC程序是靠消息驱动的,他们对于消息的处理本质上是相同的。只是Windows程序对于消息处理的过程十分清晰明了,MFC程序则掩盖了消息处理的过程,以消息映射的方式呈现在开发者面前,使得开发消息的处理十分简单。用多了mfc就想对它的消息映射机制有一个本质的了解,下面将对消息映射做详细的分析。当然,在分析MFC消息映射之前首先对Windows程序的消息处理过程进行一个简单的描述。

yiziweiyang的专栏 1831

消息循环

<br /> <br /><br />                  文档                 代码                 工具      <br /><br />VC初学者入门系列之二:消息循环<br /><br /><br /><br />适用读者:VC初学者并有C++基础。<br /><br /><br /><br /> 一、传统SDK程序的消息循环 <br /><br />在传统的SDK程序中,消息循环是很简单的,也许你不信,那我们就看看下面这段代码吧:#include <

linlin003的专栏 613

MFC与C#处理自定义消息的区别

在对接手写板处理手写板的消息时遇到的问题记录如下: MFC处理自定义消息的逻辑: 第一步:声明自定义消息 #define WM_MYMSGWM_USER + 200 //WM_USER为系统定义好的值为0x0400 第二步:在类声明中声明消息映射 DECLARE_MESSAGE_MAP() 第三步:在类声明中声明消息处理函数 例如:afx_msg LRESULT MyMsgHandler(WPARAM,LPARAM); 第四步:要实现消息映射 BEGIN_MESSAGE_MAP() ...

yunxiaobaobei的博客 335

vc消息映射机制----------------

首先看下事件和消息的区别,refer to  http://topic.youkuaiyun.com/t/20021015/16/1099048.html 引用侯捷的话就是“以讯息为基础,以事件驱动之(message   based,   event   driven)”。Windows程序的进行依靠外部发生的事件来驱动。事件发生后(例如按下一个键),最终转化为消息,放入消息队列。程序从消息队列取得消息并处

luck_good的专栏 802

MFC——3.MFC消息映射机制

本文通过绘图程序向读者介绍了MFC程序的消息映射机制,并对比了前面所讲的消息循环机制。通过消息映射能进一步理解MFC程序的响应流程,对后面可以不用向导而手动修改MFC程序打下基础工作。

langtaol的成长记 982

SDK消息机制和MFC消息机制

(1)SDK下的消息机制实现:Windows程序的运行是依靠外部发生的事件来驱动的,事件由操作系统捕捉,以消息的形式进入消息队列,然后通过消息循环从队列中不断取出消息,送到对应的窗口过程里处理。相对于DOS程序,Windows是以WinMain作为程序的入口点,以下就是一个简化的Win32程序的主体,通过while语句实现消息循环:                            其

zhandoushi的专栏 2121

MFC消息映射

消息映射是MFC应用程序的运行核心,Windows系统以消息的形式把输入传递给应用程序的窗口过程,窗口通过窗口过程来接收和处理消息,并把控制返回Windows系统。   1. 消息结构    消息是一个将事件和数据结合起来的集合。MSG结构含有来自windows应用程序消息队列的消息信息。 typedef struct tagMSG {     HWND        h

u012532379的专栏 599
上一篇: 静态类做缓存和全局对象
下一篇: C++中对象切割
burningcpu
博客等级 码龄20年 13粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值