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;

}

相关推荐
c238564 小时前
把 C++ 内存分配拆透:new 与 malloc 的三层血缘
开发语言·c++·算法
txzrxz6 小时前
最短路问题——Dijkstra 算法
数据结构·c++·算法·最短路·优先队列
noipp6 小时前
推荐题目:洛谷 P6231 [JSOI2013] 公交系统
c语言·数据结构·c++·算法·游戏·洛谷·luogu
c238566 小时前
C/C++每日一练6
c语言·c++·算法
念恒123067 小时前
网络基础
linux·网络·c++
mct1237 小时前
c++ iconv 字符utf-8转换gb2312失败
开发语言·c++
ziguo11227 小时前
Windows API 文件操作超级指南——从入门到内核
c++·windows·visualstudio
zhangfeng11339 小时前
Ascendc 大语言模型框架 AscendCraft 和pypto 的区别 pypto生成算子c++源码吗
c++·人工智能·语言模型·算子开发
一只小灿灿9 小时前
C++ 修饰符全面详解
开发语言·c++
code_pgf10 小时前
C/C++ 中 `typedef` 关键字详解
c语言·c++