MFC中的消息反射机制

MFC消息反射机制实例 问题描述         最近在做项目中,用到了树控件CTreeCtrl,但是原始的树控件只有两种选择状态,为了能够得到我再其他软件中所见到的的那种树控件,我便打开网页搜了搜,发现了有一种叫做三态树的控件,接着查了些资料把三态树运用到了项目中。 目的 解决方案 啊 阅读详情

简单说,父窗口把子窗口(控件)发送给父窗口的消息回传给子窗口的回传行为称为消息反射机制。

为什么MFC要使用消息反射机制?简单说,是MFC考虑到实际情形,为提高MFC程序设计质量(如封装性)而设计的一种机制。我们以如下实例来说明。

 

有一个对话框窗口D,内有一个按钮控件B(ID为IDC_B1),当我们单击按钮B,就我们此时的关注点来说大致会产生如下消息:

1、B:WM_LBUTTONDOWN

2、B:WM_LBUTTONUP

3、D:WM_COMMAND。此消息包含这些信息:通知码:BN_CLICKED;控件ID:IDC_B1;B的句柄。

 

如果程序员有两个任务,一:对按钮B这一类控件的单击事件编程,如何进行?二:对对话框窗口D的按钮B这个具体按钮实例单击事件编程,如何进行?

 

任务一

对于程序员来说,要本身作为一个子窗口的按钮B响应一次单击事件,差不多要对WM_LBUTTONDOWN、WM_LBUTTONUP两个消息编程,不方便。

于是我们想到,可以在父窗口D中响应WM_COMMAND来完成一次完整的单击事件处理。但是:1)、需要对WM_COMMAND消息进行分析,确认是按钮B这个类别产生的消息才能进行相应的处理,繁琐;2)、对按钮B这个类别的处理代码放在父窗口类D中实现,不利于代码的封装,因为这里的处理逻辑只与按钮B类相关。

MFC的反射机制就很好地满足了任务一的实现。MFC把由子窗口按钮B产生的WM_COMMAND消息反射给按钮B进行处理,这样,就可以在按钮B的类代码增加反射消息处理成员函数BN_CLICKED(MFC ClassWizard中为“=BN_CLICKED”),即可实现对按钮B类的单击事件处理,既方便又实现了代码逻辑封装。

 

任务二

对对话框窗口D的按钮B这个具体按钮实例单击事件编程,在MFC ClassicWizard中增加控件ID为IDC_B1、消息为BN_CLICKED的窗口D类成员函数来实现。如果话框窗口D中包含多个按钮B类的实例,比如B2(ID为IDC_B2)、B3(ID为IDC_B3)等,则如法炮制,在MFC ClassicWizard中增加控件ID为IDC_B2、IDC_B3消息为BN_CLICKED的窗口D类成员函数即可。这样的处理符合正常的封装逻辑:对话框D窗口中按钮B的不同实例对象对应不同的实际处理逻辑代码。

 

需要说明的是,目前的MFC代码实现中,任务一和任务二是互斥的,即:如果按钮B如果实现了对反射消息“=BN_CLICKED”的处理,则对话框窗口D的按钮B实例消息BN_CLICKED将得不到处理,因为MFC实现中发现,对话框窗口D发现控件B对“=BN_CLICKED”进行了处理,则不再调用按钮B实例的BN_CLICKED处理函数。

智能客服系统知识库构建:长尾问题解决方案全解析 阅读详情

相关推荐

勒索病毒c语言源代码,勒索病毒原理解析

一、编程思路什么是勒索病毒:遍历你电脑上所有文件,并且用加密算法加密,然后把加密秘钥发送到自己邮箱里,弹出窗口。工具:操作系统API,加密算法思路:1.程序设计 思路规划清楚1.1 加密单个文件1.2 遍历文件系统并加密文件2.工程实现: 编程3.测试上线 :、测试欢迎加入学习群【892643663】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包二、代码解析//文件遍...

weixin_35355756的博客 6601

MFC的消息反射机制

MFC的消息反射机制

cay22的专栏 8899

南邮-软件设计实验(C++版)

南邮软件设计 A档 一、分数统计 课题内容:   设计一个分数统计程序。包括学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文件的使用,掌握程序设计的基本方法及友好界面的设计。 课题要求: (1)输入某班级学生的姓名、分数; (2)对(1)的分数进行降幂排列并输出; (3)具有输入输出界面。 示例代码: #include<bits/stdc++.h> using...

Dainelcw 1万+

MFC消息反射

什么是消息反射? 在windows里面,子控件经常向父控件发送消息,例如很多子控件要绘制自己的背景,就可能向父窗口发送消息WM_CTLCOLOR。对于从子控件发来的消息,父控件有可能在处理之前,把消息返还给子控件处理,这样消息看起来就像是从父窗口反射回来一样,故此得名:消息反射。

milanleon的专栏 1027

一款值得关注的开源企业管理ERP系统

盒木ERP是一款开源的现代化企业管理系统,采用前后端分离架构,后端基于Python+Django,前端使用Vue+Ant Design。系统涵盖采购、销售、库存、财务等核心业务模块,支持移动端操作和PDA扫码。具有开源免费、技术先进、功能完善等特点,适合中小企业使用或二次开发。项目提供详细部署指南,支持Docker容器化部署,是学习ERP系统开发和企业数字化转型的优秀选择。

1107

避坑指南:Windows下OpenCV摄像头索引混乱问题的3种解决之道

本文详细解析了Windows下OpenCV摄像头索引混乱问题的3种解决方案,包括GUID查询法、DirectShow接口集成和注册表固化技术。针对工业视觉和智能监控场景,提供实战代码和性能优化建议,帮助开发者稳定识别多路摄像头设备,有效解决VideoCapture接口的索引漂移问题。

weixin_30836759的博客 406

MFC教程(4)消息映射的实现

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

3411

LeRobot 入门教程(十一)π0(Pi0)π0.5(Pi0.5)训练、推理、部署

本文介绍了Physical Intelligence公司开发的π₀和π₀.₅系列通用机器人控制视觉-语言-动作模型。π₀作为首款基础模型,融合流匹配、跨实体训练等技术,支持50Hz高频控制。π₀.₅是其升级版,通过异构数据协同训练解决开放世界泛化问题,在Libero基准测试中表现优异。文章详细说明了两个模型的安装要求、使用方法、训练策略及关键参数配置,包括混合精度训练、梯度检查点等优化技术,为机器人在多样化场景中的语义理解和动作控制提供了完整解决方案。

2506_90492529的博客 5038

MFC消息反射机制

消息反射机制要解决什么问题呢?         消息反射机制主要是为了控件而实现的。每当控件需要某些资讯(比如,绘制自身背景的画刷,显示字体的颜色等等)时,都会频繁地向其父窗口发送通告消息(notification message),比如最常见的WM_CTLCOLOR通告消息,让父窗口为它提供各种服务。当子控件很多时,父窗口很会变得臃肿不堪,而子控件却没事可做。另一方面,假如我们想继续创

jadeshu的博客 2235

EUV光源技术路线深度解析

EUV光刻技术的关键瓶颈在于13.5纳米光源的稳定高效获取。主流技术路线从DPP放电等离子体发展为LPP激光等离子体方案,后者通过激光轰击锡液滴实现更高功率输出。新出现的LDP技术综合激光预热与放电优势,虽功率扩展性有限,但为光源技术提供了有益补充。目前LPP仍是唯一通过量产验证的方案,而LDP可能作为过渡技术应用于特定场景。EUV光源的发展实质是能量转化效率与系统可靠性的持续优化过程,各种技术路线的探索共同推动着这一核心工艺的进步。

硬核科技 556

基于MATLAB的特征模式分解(FMD)算法详解

本文详细介绍了基于MATLAB的特征模式分解(FMD)算法实现。FMD是一种新型自适应信号分解方法,通过自适应FIR滤波器组和相关峭度优化目标,有效解决传统方法(如EMD、VMD)的模态混叠问题。文章系统阐述了FMD的算法原理、数学模型和实现步骤,包括自适应FIR滤波器设计、相关峭度优化和模态选择机制。与现有方法相比,FMD在旋转机械故障诊断中展现出更强的特征提取能力和噪声鲁棒性。MATLAB实现部分包含核心函数、参数优化和可视化工具,并通过轴承故障等案例验证了算法的有效性。

qq_42212808的博客 192

深度剖析MFC消息反射机制收藏

 深度剖析MFC消息反射机制收藏function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(keyit=window.open(http://www.3

skyremember的专栏 1246

OGRE 3D----2. QGRE + QQuickView

将 OGRE(面向对象图形渲染引擎)集成到使用 QQuickView 的 Qt Quick 应用程序中,可以在现代灵活的 UI 框架中提供强大的 3D 渲染功能。本文将指导您如何在 QQuickView 环境中设置 OGRE。

charce_you的专栏 913

深度剖析MFC消息反射机制

转自http://blog.youkuaiyun.com/zyc464301/archive/2007/10/29/1854930.aspx 深度剖析消息反射机制作者:hustli     (附:我稍加修改)摘要:在前面我们分析了控件通知消息WM_NOTIFY,和WM_NOTIFY紧密联系的还有一个MFC新特性:消息反射。本文中,我想就这个问题作一个全面的论述,如果有错误,还望各路大虾批评指正

hityct1的专栏 7019

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

[转载] 分析与理解MFC消息反射机制

郑力群前言: 我曾写过一篇文章对通知消息WM_NOTIFY进行分析,消息反射是MFC中对通知消息的处理方式,两者之间关系十分紧密,因此,我写了这篇文章,希望能够描绘出通知消息的完整印象。消息反射的基础知识 1、消息反射解释:   父窗口将控制子窗口发给它的通知消息,首先反射回子窗口进行处理(即给控制子窗口一个机会,让控制子窗口处理此消息),这样通知消息就有机会能被子窗口自身进行处理。 2、

DDGG的专栏 2220

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

分析与理解MFC消息反射机制

前言:  我曾写过一篇文章对通知消息WM_NOTIFY进行分析,消息反射是MFC中对通知消息的处理方式,两者之间关系十分紧密,因此,我写了这篇文章,希望能够描绘出通知消息的完整印象。 消息反射的基础知识  1、消息反射解释:    父窗口将控制子窗口发给它的通知消息,首先反射回子窗口进行处理(即给控制子窗口一个机会,让控制子窗口处理此消息),这样通知消息就有机会能被子窗口自身进

Howard_Liu1314的专栏 1833

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

MFC深度剖析消息反射机制

深度剖析消息反射机制 作者:hustli     摘要:在前面我们分析了控件通知消息WM_NOTIFY,和WM_NOTIFY紧密联系的还有一个MFC新特性:消息反射。本文中,我想就这个问题作一个全面的论述,如果有错误,还望各路大虾批评指正。     什么是消息反射?     在windows里面,子控件经常向父控件发送消息,例如很多子控件要绘制自己的背景,就可能向父窗口发送消息WM_CTL

qing666888的专栏 730

让MFC消息反射机制原型毕露-------(Message Reflection)

绪言          我想现在我可以写一遍和别人不一样的关于探讨MFC消息反射机制的文章了。        其实,在网上有很多关探讨MFC消息反射机制的文章,但是大都是把MSDN中的TN062那篇文章翻译一下或者把>这篇文章的操作重复一篇。对于那些想刨根问底的人来说,这显然是不够的。而这篇文章将会为那些渴望知道MFC消息反射机制底层实现细节的人带来福音。      消息反射机制要解决什么问

黑马啸西风 2100

mfc消息反射机制简介

在Windows里面,子控件经常向父控件发送消息,例如很多子控件要绘制自己的背景,就可能向父窗口发送消息WM_CTLCOLOR。对于从子控件发来的消息,父控件有可能在处理之前,把消息返还给子控件处理,这样消息看起来就想是从父窗口反射回来一样,故此得名:消息反射。      消息反射机制剥离了子父控件之间的关系,简化了父控件的功能和实现。一般来说,消息反射机制的传递过程如下:      1、控件

Ocean2006的专栏 2003
下一篇: 关于uC/OS-II 2.52 Turbo C++ 3.0编译的几个问题。
二进制脑袋
博客等级 码龄25年 25粉丝 21原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值