【MFC】中的ON_COMMAND_RANGE宏

ON_COMMAND_RANGE与ON_CONTROL_RANGE Use this macro to map a contiguous range of command IDs to a single message handler function. ON_COMMAND_RANGE(id1, id2, memberFxn ) Parameters id1 Command ID at the be 阅读详情

VC++中的ON_COMMAND_RANGE宏和ON_COMMAND等宏一样,是用来声明消息处理函数的,与

ON_COMMAND不同的是,此宏可用来定义一组消息的处理函数。

两个宏的用法是:

ON_COMMAND(id,memberFxn)

ON_COMMAND_RANGE(id1,id2,memberFxn)

看起来其中memberFxn似乎没有什么差别,但是在学习使用中,发现ON_COMMAND_RANGE宏中的memberFxn常常会被定义成带参数的处理函数,而ON_COMMAND则是不带参数的处理函数。这就让我奇怪了,于是查阅MSDN的解释,循着提供的线索一直查到了《Visual C++ Programmer’s Guide》中的《Handlers for Message-Map Ranges》一章,于是在《Declaring the Handler Function》一节中找到了答案,引用原文如下:

Handler functions for single commands normally take no parameters. With the exception of update handler functions, handler functions for message-map ranges require an extra parameter, nID, of type UINT. This parameter is the first parameter. The extra parameter accommodates the extra command ID needed to specify which command the user actually chose. 

为了帮助和我一样不太懂英文的朋友,顶着头皮翻译了下:

单个命令(消息)的处理函数通常不带参数。但是更新处理函数、针对消息映射范围的处理函数需要一个额外的参数,一个UINT类型的nID。此参数是第一个参数,这个额外的参数收集了用来指定用户真正选择命令的命令ID。

因此完全可以一个带参数的消息处理函数来接收指定的命令ID,不过这里要提醒朋友一点的是,并不是非得只有一个参数,可以使用多个参数的消息处理函数,如function(WPARAM wParam, LPARAM lParam),但是真正能够使用的参数是第一个参数wParam,它是用户选择的命令ID。

对于更新处理函数,也存在相对应于ON_COMMAND_RANGE的ON_UPDATE_COMMAND_UI_RANGE宏,它的作用也是处理连续的范围(contiguous range),但是它与ON_COMMAND_RANGE有一点点区别。通过上面可知,一般范围处理函数(ON_COMMAND_RANGE)是通过在处理函数后面加一个参数,当消息进行处理时,将会把该命令ID传至该参数。而ON_UPDATE_COMMAND_UI_RANGE则使用的是pCmdUI,一个CCmdUI的指针类型,它内部就包含了一个数据成员(m_nID),用来指向命令ID,具体请参考MSDN中的内容。上述内容在MSDN中的《Visual C++ Programmer’s Guide》中的《Handlers for Message-Map Ranges》一章《Example for a Range of Command IDs》一节中可以找到原文:

Update handler functions for single commands normally take a single parameter, pCmdUI, of type CCmdUI*. Unlike handler functions, update handler functions for message-map ranges do not require an extra parameter, nID, of type UINT. The command ID, which is needed to specify which command the user actually chose, is found in the CCmdUI object.

意思大概也是:

单个命令的更新处理函数通常只带一个参数,即一个CCmdUI指针类型的pCmdUI。不像普通的处理函数一样,针对消息映射范围的更新处理函数不需要一个额外的UINT参数nID,这个用来指定用户真正选择的命令ID,能够在CCmdUI对象中找到。

MFC消息映射宏 <br /> <br />MFC消息映射宏 <br />消息的传递与发送是Windows应用程序的核心所在,任何事件的触发与响应均要通过消息的作用才能得以完成。在SDK编程中,对消息的获取与分发主要是 通过消息循环来完成的,而在MFC编程中则是通过采取消息映射的方式对其进行处理的。相比而言,这样的处理方式要简单许多,这也是符合面向对象编程中尽可 能隐含实现细节的原则。一个完整的MFC消息映射包括对消息处理函数的原型声明、实现以及存在于消息映射中的消息入口。这几部分分别存在与类的头文件和实现文件中。一般情况下 阅读详情

相关推荐

基于MFC的计算器设计与实现:ON_CONTROL_RANGE消息机制与运算规则详解

MFC(Microsoft Foundation Classes)是基于Windows API的C++封装框架,提供了一套类库以简化Windows应用程序开发。它通过消息映射机制替代传统的繁琐窗口过程函数,使GUI编程更加面向对象。在本计算器项目中,我们采用文档/视图架构的简化模式,以CDialog为基础构建主界面,利用资源编辑器布局按钮与文本框控件。整个项目围绕消息驱动模型展开,核心逻辑集中在对话框类中,通过控件ID关联UI元素与事件处理,为后续批量消息处理和表达式解析奠定基础。

weixin_33173126的博客 1151

ON_COMMAND_RANGE 多个按钮响应一个函数

很久没来写博客了,都收到官方的邮件提醒再不写就不是专家会员,没办法只能再写一篇完成任务。今天主要介绍一下ON_COMMAND_RANGE的用法第一次用这个方法还是刚毕业那会,那时写过一个控制程序,界面上有很多电器的控制按钮,这些按钮的响应函数基本一致,只是相应的ID值不一样,要是一一写响应函数那不累死人,于是就东找西找,找到ON_COMMAND_RANGE。最近一个偶然机会也要用到它,三下五除二,

Jinhill's Blog 2万+

ON_COMMAND_RANGE多个按钮响应一个函数的解决方法

主要介绍了ON_COMMAND_RANGE多个按钮响应一个函数的解决方法,需要的朋友可以参考下

ON_COMMAND_RANGE()使用注意事项

ON_COMMAND_RANGEON_COMMAND_RANGE( id1, id2, memberFxn )参数: id1 一个连续范围的命令ID的起始值。 id2 一个连续范围的命令ID的结束值。 memberFxn 该命令被映射到的消息处理函数的名字。 说明:使用这个宏把一个连续范围的命令ID映射到单个命令处理函数。ID的范

guoquan2003的专栏 7840

用Python和CasADi实现高斯伪谱法:一个轨迹优化问题的保姆级教程

本文详细介绍了如何使用Python和CasADi框架实现高斯伪谱法解决轨迹优化问题。通过保姆级教程,从环境准备、问题建模到高斯伪谱法的核心实现,包括配点与权重计算、微分矩阵构造和动力学约束实现,最终完成问题求解与结果可视化。适用于机器人轨迹规划和无人机路径优化等工程场景。

weixin_30776273的博客 293

宇树机器狗go2—slam建图(1)点云格式

上一篇番外文章教大家如何在宇树机器狗go2的gazebo仿真环境中实现简单的导航运动,本期文章会教大家如何让宇树的机器狗go2在仿真环境中进行slam建图时经常会遇到的一些点云格式,在后续的slam建图和slam算法解析的时候会经常与这些点云信息打交道。宇树机器狗go2仿真会作为一个长期项目来进行不定期更新,仿真不只限于在gazebo上实现,后面还会在isaac sim等仿真平台上教大家如何搭建,其目的还是帮助各位都能以较低的成本加入到宇树机器狗go2的学习中。

古月居 3270

VC++中的ON_COMMAND_RANGE宏(附例子)

转自:http://www.cnblogs.com/wqj1212/articles/1089066.htmlVC++中的ON_COMMAND_RANGE宏和ON_COMMAND等宏一样,是用来声明消息处理函数的,与ON_COMMAND不同的是,此宏可用来定义一组消息的处理函数。两个宏的用法是:ON_COMMAND(id,memberFxn)ON_COMMAND_RANGE(id1,id2

1885

k8s集群部署私有镜像仓库

本文介绍了在Kubernetes集群中部署私有镜像仓库的完整方案。使用registry:2镜像创建Deployment,通过NodePort(30500)暴露服务,并采用hostPath(/data/registry)实现数据持久化。部署过程包括节点标记、YAML配置、资源创建及验证步骤,同时提供了Docker和Containerd两种环境下的详细使用方法,包括配置不信任私有仓库、镜像推送/拉取操作指南。该方案特别适合开发测试环境,为团队提供便捷的本地镜像管理能力。

weixin_42728286的博客 892

ON_COMMAND_RANGE 用法

ON_COMMAND_RANGE 使用此宏映射连续范围的命令 ID。一个消息处理函数。 ON_COMMAND_RANGE(id1, id2, memberFxn ) 参数 id1 在连续范围的命令 ID 的命令 ID。 id2 命令 ID。连续范围的命令 ID 的结尾。 memberFxn 命令消息映射处

ZjhCN 1408

【机械臂算法】机械臂动力学参数辨识仿真

本文以puma560m机械臂为例子进行动力学参数辨识的讲解,puma560m可以在robotic toolbox中找到,这里以它真实机械臂对他的动力学参数进行辨识。此外这里还有要说的是,机械臂参数辨识其实是一个系统工程,其中和系统的机械、电子、嵌入式都有着很深的联系,并不是仿真这么简单的。

vrijheid的博客 7828

从315MHz到125kHz:手把手教你用Arduino模拟汽车钥匙的RKE/PKE信号(附代码)

本文详细介绍了如何使用Arduino开发板和射频模块模拟汽车钥匙的RKE/PKE信号,包括硬件准备、代码实现和安全机制。通过实践教程,读者可以深入理解315MHz和125kHz信号在汽车电子领域的应用,掌握无钥匙进入系统的核心技术。

weixin_30945039的博客 223

消息映射宏的种类

1)用于Windows消息的宏,前缀为“ON_WM_”这样的宏不带参数,因为它对应的消息和消息处理函数的函数名称、函数原型是确定的。MFC提供了这类消息处理函数的定义和缺省实现。每个这样的宏处理不同的Windows消息。例如:宏ON_WM_CREATE把消息WM_CREATE映射到OnCreate函数,消息映射条目的第一个成员nMessage指定为要处理的Windows消息的ID,第二个成员nCo

明月清风 精进不止 1058

使用Matlab simulink的PLC coder功能进行算法搭建与处理

使用的案例如下: Anti-Windup PID Control Demonstration with Feedforward Control 将其中的PID块生成SCL语言再导入TIA 使用的平台如下: Matlab 2019b TIA portal 15.1 应用:可以在PLC中搭载一些并不方便使用的,或者比较难使用的算法 步骤如下: 首先打开案例,案例地址我放在最下面,点击Run运行仿真,必...

苦走一口田 1万+

多个按键点击映射到同一个消息函数中的方法(ON_COMMAND_RANGE)

多个按键点击映射到同一个消息函数中的方法(ON_COMMAND_RANGE) 建立MFC基于对话框的工程:CMyDlg.h,CMyDlg.cpp 方法步骤: 1.在MFC对话框中添加 按键 ,确保它们的ID号连续,即:在Resource.h 文件中 数字是连续的 #define IDC_BTN_START                   1000 #defin

pzy的专栏 847

博途PLC信号处理系列之卡尔曼滤波程序(Kalman Filter)

三菱系列PLC的卡尔曼滤波程序,可以参看下面这篇博文PLC滤波算法之卡尔曼滤波(kalmanFilter)代码+测试_RXXW_Dor的博客-优快云博客_plc滤波kalman滤波是采用递归的方法解决线性滤波问题,只需要当前的测量值input(西门子PLC里比如我们的模拟量通道AIW0值)和前一个采样周期的估计值(上一个时刻的滤波输出结果last_out)就能进行状态估计,需要的存储空间小,每一步的计算量小。下面我们通过程序代码一一给大家展示下。注意。......

RXXW_Dor的博客 3475

基于FPGA的数字信号处理(11)--定点数的舍入模式(2)向最临近值取整nearest

基于FPGA的数字信号处理(11)--定点数的舍入模式(2)向最临近值取整nearest

孤独的单刀 5472

mfc 数组溢出_MFC消息机制

如果像我一样初学的,可以留下邮箱索取源码。//MainFrm.hafx_msgvoidOnMenuMsg();//菜单命令消息afx_msgvoidOnMenuItem(UINTuId);//范围消息,不限菜单afx_msgvoidOnMenuItemUI(CCmdUI*pCmdUI);//命令消息接口afx_msgvoidOnToolMsg();//工具条命令消息af...

weixin_39546661的博客 347

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

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

当了一份代码 忙活了近一天 新手伤不起啊 ON_COMMAND_RANGE

程序主要是实现了一个计算器功能 代码部分上传到资源处了 首先要说的不是逻辑上多困难 因为是新手刚开始接触MFC编程 调试了一天的程序费好多劲 把收获总结一下吧  1:函数PreTranslateMessage(MSG* pMsg)    MSDN是这样解释的:   CWnd::PreTranslateMessage virtual BOOL PreTranslateMessage(

天蝎座 4255

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ON_COMMAND_RANGE用法

ON_COMMAND_RANGE用法  afx_msg void OnOutPutStatusButtonUp  (WPARAM wParam, LPARAM lParam); BEGIN_MESSAGE_MAP(CIOStatue, CDialog) //{{AFX_MSG_MAP(CIOStatue) //}}AFX_MSG_MAP ON_COMMAND_RANGE(I

石榴的专栏 1510

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【MFC】ON_CONTROL_RANGE用法

问题 多个编辑框的EN_KILLFOCUS响应事件的处理,需要用到ON_CONTROL_RANGE。 定义 ON_CONTROL_RANGE定义。 #define ON_CONTROL_RANGE(wNotifyCode, id, idLast, memberFxn) \ { WM_COMMAND, (WORD)wNotifyCode, (WORD)id, (WORD)idLast, AfxSigCmd_RANGE, \ (AFX_PMSG) \ (static_cast< .

sunriver2000的专栏 2801

ON_UPDATE_COMMAND_UI_RANGE

ON_UPDATE_COMMAND_UI_RANGE( id1, id2, memberFxn ) 参数: id1 一个连续的命令ID范围的起始ID。 id2 一个连续的命令ID范围的结束ID。 memberFxn 命令被映射到的更新

4338

MFC消息映射之ON_COMMAND_RANGE()

引用地址: http://blog.youkuaiyun.com/jinhill/article/details/8581555 http://blog.youkuaiyun.com/guoquan2003/article/details/4532055 一、先简单介绍一下ON_COMMAND_RANGE的使用 ON_COMMAND_RANGE ON_COMMAND_RANGE( id1, id

m0_37953415的博客 2374

ON_COMMAND_EX ON_COMMAND

ON_COMMAND  命令消息普通映射宏ON_COMMAND_EX  命令消息扩展映射宏扩展映射宏和对应的普通映射宏的参数个数相同,含义一样。但是扩展映射宏的消息处理函数的原型和对应的普通映射宏相比,有两个不同之处:一是多了一个UINT类型的参数,另外就是有返回值(返回BOOL类型)。回顾4.4.2章节,范围映射宏ON_COMMAND_RANGE的消息处理函数也有一个这样的参

人在旅途/章鸽 的专栏 2165

windows消息映射宏的种类

1)用于Windows消息的宏,前缀为“ON_WM_” 这样的宏不带参数,因为它对应的消息和消息处理函数的函数名称、函数原型是确定的。MFC提供了这类消息处理函数的定义和缺省实现。每个这样的宏处理不同的Windows消息。 例如:宏ON_WM_CREATE把消息WM_CREATE映射到OnCreate函数,消息映射条目的第一个成员nMessage指定为要处理的Windows消息的ID,第二个成...

zxf347085420的博客 633

ON_COMMAND_RANGE的用法

今天主要介绍一下ON_COMMAND_RANGE的用法第一次用这个方法还是刚毕业那会,那时写过一个控制程序,界面上有很多电器的控制按钮,这些按钮的响应函数基本一致,只是相应的ID值不一样,要是一一写响应函数那不累死人,于是就东找西找,找到ON_COMMAND_RANGE。最近一个偶然机会也要用到它,三下五除二,CODE写完了,1.在要添加的工程上添加函数afx_msg void OnButto...

u013407012的专栏 2435

消息宏: ON_COMMAND_RANGE/ON_COMMAND_RANGE_UI

ON_COMMAND_RANGE(beginId,endId,procFunc)该消息宏定义处理一组从开始到结束编号的消息处理函数.msdn: Use this macro to map a contiguous range of command IDs to a single message handler function.同理ON_UPDATE_COMMAND_UI_RANGE则

pxxx123的专栏 698
上一篇: 对话框处理TAB按键事件的三种方法
下一篇: 【MFC】消息映射宏
cmdhack
博客等级 码龄19年 20粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值