当前位置: 首页 > news >正文

MFC将类A中的事件在类B中处理采用回调函数实现

需求:
在类A的界面上有一个tab控件。tab控件上面有那个页面。在MFC编程中一个tab的一个页面就应该是一个新的类。在tab的一个页面上有一个list控件。现在需要将list控件的点击事件,双击事件等在类A里面处理。

解决:
在类B里面给控件list添加点击事件。在点击事件里面回调类A的函数。从而实现。

部分代码:
类B:

定义回调函数指针

	// 回调函数指针std::function<void(NMHDR *, int,int)> m_ItemChangedCallback;

定义设置回调指针的函数

void DlgRadarItemTabI002::SetItemChangedCallback(std::function<void(NMHDR *, int,int)> callback)
{m_ItemChangedCallback = callback; // 设置回调函数};

在事件里面回调

void DlgRadarItemTabI002::OnLvnItemchangedListI002(NMHDR *pNMHDR, LRESULT *pResult)
{// 检查回调是否有效if (m_ItemChangedCallback){m_ItemChangedCallback(pNMHDR,111,2); // 调用回调,传递变化的项索引}*pResult = 0; // 表示消息处理成功}

类A:
给类B对象设置回调函数指针;

	m_radarItemTab1.SetItemChangedCallback(std::bind(&CRadarSetupTestDlg::OnTab1ItemChanged, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));m_radarItemTab2.SetItemChangedCallback(std::bind(&CRadarSetupTestDlg::OnTab1ItemChanged, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));m_tab.AddPage(_T("I001"), &m_radarItemTab1, IDD_DIALOG_I001);m_tab.AddPage(_T("I002"), &m_radarItemTab2, IDD_DIALOG_I002);m_tab.Show();

定义回调函数

void CRadarSetupTestDlg::OnTab1ItemChanged(NMHDR *pNMHDR, int type,int tabPage)
{if (tabPage == 1){}else if(tabPage == 2){}if (type == 111){}else if (type == 222){}else if(type == 333){}
};

回调函数需要传什么参数可以按需求设置,这里没有用自定义消息是因为类A中包含了类B的头文件。自定义消息在类B里面拿到到类A的对象。所以使用回调函数

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MySQL中的distinct和group by哪个效率更高?
  • vba代码插入折线图
  • SQL进阶技巧:如何不使用union all进行行转列?【三种方法实现】
  • 【机器学习】深度学习实践
  • tea-入土为安的第十七天
  • 基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
  • [C++][opencv]基于opencv实现photoshop算法图像剪切
  • Java的jdk配置成功,但是输入java -version等,命令行没有任何反应
  • 【区块链+商贸零售】吾卡数字预付式消费服务平台 | FISCO BCOS应用案例
  • SpringBoot-配置加载顺序
  • servlet的执行顺序
  • 健韵坊(详细项目实战一)Spring系列 + Vue3
  • 探索AWS免费资源:无账号也能体验云计算魅力
  • 网络协议七 应用层 DNS协议 和 DHCP协议 这两个都了解就好
  • ffmpeg的基础命令
  • @jsonView过滤属性
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 0基础学习移动端适配
  • co.js - 让异步代码同步化
  • httpie使用详解
  • JavaScript-Array类型
  • JavaScript新鲜事·第5期
  • js
  • Laravel Mix运行时关于es2015报错解决方案
  • php面试题 汇集2
  • Solarized Scheme
  • spring boot 整合mybatis 无法输出sql的问题
  • tensorflow学习笔记3——MNIST应用篇
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 基于Android乐音识别(2)
  • 如何选择开源的机器学习框架?
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 入手阿里云新服务器的部署NODE
  • 我看到的前端
  • 主流的CSS水平和垂直居中技术大全
  • 移动端高清、多屏适配方案
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​字​节​一​面​
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #vue3 实现前端下载excel文件模板功能
  • #知识分享#笔记#学习方法
  • (152)时序收敛--->(02)时序收敛二
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (七)Flink Watermark
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • *** 2003
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .net core 外观者设计模式 实现,多种支付选择
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .net通用权限框架B/S (三)--MODEL层(2)