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的对象。所以使用回调函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值