用类成员函数定义回调函数如何省去指针参数传递

代码如下,使用setMouseCallback 函数时,为了封装类成员函数,中间使用了普通函数使用类名指针指向类成员回调函数,但普通函数只起到了参数传递作用,随着功能的增多,该类型普通函数会大量增多,如果省去可以简化代码,求助!

 

ps:setMouseCallback是opencv中调用鼠标信息的函数。

void OnMouseAction(int ev, int x, int y, int flags, void *userdata)
{
	if (gSystemMgr.m_cSharpDlg != nullptr)
	{
		gSystemMgr.m_cSharpDlg->OnMouseActionInternal(ev, x, y, flags, userdata);
	}
}

void CSharpOpencvTestDlg::OnBnClickedButtonTest()
{
	if (!m_bImageCapFlag)
	{
		return;
	}
	imshow(m_strImgName, m_matImage);
	setMouseCallback(m_strImgName, OnMouseAction, 0);
}

void CSharpOpencvTestDlg::OnMouseActionInternal(int event, int x, int y, int flags, void * userdata)
{

	if (event == EVENT_LBUTTONDOWN)
	{
		previousPoint = cv::Point(x, y);
		cstrLog.Format(L"x:%d,y:%d", x, y);
		gSystemLog.DisplayLogAndSave(cstrLog.GetBuffer(), LV_EVENT);
	}

	else if (event == EVENT_MOUSEMOVE && (flags&EVENT_FLAG_LBUTTON))
	{
		pt = cv::Point(x, y);
		line(m_matImage, previousPoint, pt, Scalar(0, 0, 255), 2, 5, 0);
		previousPoint = pt;
		//	ShowImage(image, IDC_SHOW_IMAGE);
		imshow(m_strImgName, m_matImage);
	}
}

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m