随便写个测试dlg对话框程序,其中用到了opencv中的void on_mouse( int event, int x, int y, int flags, void* param ),功能是想实现鼠标获取图像上的像素点。
1、这个on_mouse()不能作为dlg对话框成员函数,只能作为静态全局函数进行调用。
2、在on_mouse()函数中需要访问到dlg类中成员变量。解决方式:
1)先申请个全局void类型指针: void *pdlg;
2)在dlg InitDialog中,将该void指针初始化为this: pdlg= this;
3)再将void类型强制转换成dlg类型:
CInfraredTestDlg *dlg;
dlg = (CInfraredTestDlg *)pdlg;
贴上on_mouse()内代码。下面
static void on_mouse( int event, int x, int y, int flags, void* param )
{
CInfraredTestDlg *dlg;
dlg = (CInfraredTestDlg *)pdlg;
if( !dlg->m_pImage )
return;
if( dlg->m_pImage->origin )
y = dlg->m_pImage->height - y;
if( event == CV_EVENT_LBUTTONDOWN )
{
dlg->m_pt = cvPoint(x,y);
dlg->m_imgpix[dlg->m_i].x = dlg->m_pt.x;
dlg->m_imgpix[dlg->m_i].y = dlg->m_pt.y;
dlg->add_remove_pt = 1;
points[dlg->m_i]= cvPointTo32f(dlg->m_pt);
cvCircle( dlg->m_pImage, cvPointFrom32f(points[dlg->m_i]), 3, CV_RGB(0,255,0), -1, 8,0);
dlg->m_i++;
}
}