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;
}