全局函数中访问dlg类成员变量,使用this指针
2013-03-05 16:49
661 查看
随便写个测试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++;
}
}
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++;
}
}
相关文章推荐
- 使用global关键字在函数中访问全局变量
- 全局的callback函数访问一个类的成员变量
- 在C++工程中main函数之前跑代码的廉价方法(使用全局变量和全局函数)
- 使用sort 和自定义比较函数对任意成员变量排序
- linux C++ 类成员函数中创建线程,且能访问类中其他成员变量
- 函数内怎么使用局部变量和全局变量
- 从零开始学C++之对象的使用(一):static 成员变量、static 成员函数、类/对象的大小
- C++中静态成员函数访问成员变量问题
- 简述static关键字的作用?(备注:在什么条件下使用static修饰局部变量、全局变量、函数)
- 类反射学习(三) JAVA如何利用类反射调用普通函数、访问成员成员变量
- javascript 直接创建对象与间接创建对象 私有函数不能访问this变量 是否使用var声明变量几个问题探讨
- C++ static CString 变量在成员函数与全局函数中的不同表现
- CLR中函数引用传递无法使用ref class成员变量的问题
- C++成员变量、函数修饰符与访问权限
- C++成员变量、函数修饰符与访问权限
- php在函数内使用全局变量
- js使用闭包时,内部函数是直接访问外部函数的实际变量而非复制一份新变量
- 关于空指针类型的类变量的成员函数访问的问题
- vbscript访问函数外类变量和全局变量的方法
- c++ public, protected, private成员变量,成员函数继承和访问规则实例代码