在MFC下如何用回调函数呀?
问题:使用回调函数,如何实现在消息处理函数里处理类成员变量?初学MFC,折腾了几天了也没有结果,希望能得到您的帮助。
回调语句如下:
cvSetMouseCallback("view",on_MouseHandle,m_pImage);
错误提示:非标准语法,请使用“&”来创建指向成员的指针。
从网上搜了半天,都说把回调处理函数设置成静态函数,可是这样无法在函数里修改类成员变量的值,代码中的drawing_box等。
把回调函数修改成cvSetMouseCallback("view",on_MouseHandle(),m_pImage);又需要给出on_MouseHandle()的实参。
相关代码如下:
//*.h
private:
IplImage* m_pImage;
BOOL drawing_box;
CvRect box;
public:
//static void on_MouseHandle(int event0, int x, int y, int flags, void* param);
void on_MouseHandle(int event0, int x, int y, int flags, void* param);
//*.cpp,设为静态函数后,drawing_box、box为非静态函数报错
void on_MouseHandle(int event, int x, int y, int flags, void* param) {
IplImage* image = (IplImage*)param;
switch (event) {
case CV_EVENT_MBUTTONDOWN: {
drawing_box = TRUE;
box = CvRect(x, y, 0, 0); }
case CV_EVENT_MOUSEMOVE: {
if (drawing_box) {
box.width = x - box.x;
box.height = y - box.y;
}
}
break;
case CV_EVENT_LBUTTONUP: {
drawing_box = false;
if (box.width < 0) {
box.x += box.width;
box.width *= -1;
}
if (box.height < 0) {
box.y += box.height;
box.height *= -1;
}
draw_box(image, box);
}
break;
}
}