网站管理运营,建设网贷网站,房产中介网站建设模板,敦煌网外贸论坛需求#xff1a; 在类A的界面上有一个tab控件。tab控件上面有那个页面。在MFC编程中一个tab的一个页面就应该是一个新的类。在tab的一个页面上有一个list控件。现在需要将list控件的点击事件#xff0c;双击事件等在类A里面处理。
解决#xff1a; 在类B里面给控件list添加…需求 在类A的界面上有一个tab控件。tab控件上面有那个页面。在MFC编程中一个tab的一个页面就应该是一个新的类。在tab的一个页面上有一个list控件。现在需要将list控件的点击事件双击事件等在类A里面处理。
解决 在类B里面给控件list添加点击事件。在点击事件里面回调类A的函数。从而实现。
部分代码 类B
定义回调函数指针 // 回调函数指针std::functionvoid(NMHDR *, int,int) m_ItemChangedCallback;定义设置回调指针的函数
void DlgRadarItemTabI002::SetItemChangedCallback(std::functionvoid(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的对象。所以使用回调函数