MFC 重写了listControl类(类名为A),并把双击事件的处理函数定义在A中,主窗口如何接收表格是否被双击

刚接触MFC遇到的问题,我在主对话框的.cpp里添加了表格的双击处理事件,但是没用,试了下添加单击的,发现居然可以进单击的处理函数,就很懵逼,然后我就把处理双击事件的函数添加到表格的类中,那这样就会又有个问题,我想在主程序这里去处理这个事件,那我应该怎么做?然后采用的是回调函数进行处理:

在A类 .hpp 中添加​​​​​​​

public:

void setDoubleClick(function<void(NMHDR* pNMHDR, LRESULT* pResult)> doubleClickCallBack);

afx_msg void OnDblclkList2(NMHDR* pNMHDR, LRESULT* pResult);

private:

function<void(NMHDR* pNMHDR, LRESULT* pResult)> m_doubleClickCallBack;

在A类 .cpp 中添加

void ExListCtrl::setDoubleClick(function<void(NMHDR* pNMHDR, LRESULT* pResult)> doubleClickCallBack) {

m_doubleClickCallBack = doubleClickCallBack;

}

void ExListCtrl::OnDblclkList2(NMHDR* pNMHDR, LRESULT* pResult)

{

LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);

if (m_doubleClickCallBack) {

m_doubleClickCallBack(pNMHDR, pResult);//当表格被双击就调用

}

*pResult = 0;

}

在主对话框类 .cpp 的OnInitDialog()中添加绑定

childList.setDoubleClick(std::bind(&CmoldingSinglePieceAutoImportSheetDlg::OnDoubleClick_List2, this, std::placeholders::_1, std::placeholders::_2));

定义主对话框的处理双击函数并在头文件中声明

void CmoldingSinglePieceAutoImportSheetDlg::OnDoubleClick_List2(NMHDR* pNMHDR, LRESULT* pResult)

{

LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);

// TODO: 在此添加控件通知处理程序代码

//已被双击

*pResult = 0;

}

相关推荐
楼田莉子1 小时前
C++算法题目分享:二叉搜索树相关的习题
数据结构·c++·学习·算法·leetcode·面试
大锦终2 小时前
【算法】模拟专题
c++·算法
方传旺2 小时前
C++17 std::optional 深拷贝 vs 引用:unordered_map 查询大对象性能对比
c++
Dontla2 小时前
Makefile介绍(Makefile教程)(C/C++编译构建、自动化构建工具)
c语言·c++·自动化
何妨重温wdys3 小时前
矩阵链相乘的最少乘法次数(动态规划解法)
c++·算法·矩阵·动态规划
重启的码农3 小时前
ggml 介绍 (6) 后端 (ggml_backend)
c++·人工智能·神经网络
重启的码农3 小时前
ggml介绍 (7)后端缓冲区 (ggml_backend_buffer)
c++·人工智能·神经网络
雨落倾城夏未凉3 小时前
5.通过拷贝构造函数复制一个对象,假如对象的成员中有个指针类型的变量,如何避免拷贝出来的副本中的该成员之下行同一块内存(等价于默认拷贝构造函数有没有缺点)
c++·后端
雨落倾城夏未凉3 小时前
4.深拷贝VS浅拷贝
c++·后端
tanyongxi664 小时前
C++ 特殊类设计与单例模式解析
java·开发语言·数据结构·c++·算法·单例模式