mfc 找出一个窗口中的所有控件句柄_实战经验:ON_CONTROL_REFLECT(_EX)的在CEdit扩展中的使用...

本文介绍了如何在MFC中扩展CEdit控件,利用ON_CONTROL_REFLECT和ON_CONTROL_REFLECT_EX宏处理控件消息,特别是EN_CHANGE消息。通过反射技术,实现控件自处理消息并可选择传递给父窗口,降低代码耦合,提升组件的易用性。
摘要由CSDN通过智能技术生成

问题

MFC提供了编辑框控件CEdit,可以基本满足我们的一般性编辑需求,但是如果想对CEdit进行定制,例如重新设计其边框,对用户输入做预处理的时候,我们需要扩展CEdit。今天来看看ON_CONTROL_REFLECT和ON_CONTROL_REFLECT_EX这两个反射宏在CEdit扩展中的使用。

ON_CONTROL_REFLECT

从名称上来看,ON_CONTROL_REFLECT是一个反射宏。所谓反射,可以这样理解:通常控件的运行,例如绘制,通知的处理等需要其父窗口来处理,如果希望控件能自己处理一些消息,则需要使用到反射。也即,控件的消息将不会路由到其父窗口,而是直接在控件类里直接得到处理。

以下代码演示了通过ON_CONTROL_REFLECT宏,实现在控件类中直接处理EN_CHANGE消息的过程。

2e4c965991de336dbc5210b820bbaddb.png

代码解析

1) 我们的CMyEdit继承自CEdit,并通过编写事件处理函数OnEnChange来处理控件的EN_CHANGE消息。通过ON_CONTROL_REFLECT来将EN_CHANGE消息反射至类本身。

2) 注意,在这种情况下,父窗口将不会收到EN_CHANGE通知,也即,你在父窗口中编写如下的代码,将不会工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值