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