qq_22223065 2021-06-14 11:25 采纳率: 0%
浏览 47
已结题

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

代码如下,使用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);
	}
}
  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2021-06-17 14:56
    关注

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

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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计