在MFC下如何用回调函数呀?

mfkinfo 2017-12-09 05:15:37
问题:使用回调函数,如何实现在消息处理函数里处理类成员变量?初学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;
}
}
...全文
218 2 点赞 打赏 收藏 举报
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
paschen 版主 2017-12-10
回调函数要用静态成员函数,要修改类成员变量的话,你可以从全局获取到对应的类对象指针进行修改,如使用AfxGetMainWnd 、AfxGetApp等获得
  • 打赏
  • 举报
回复
mfkinfo 2017-12-09
把涉及到的变量都设置成静态的可以实现,但是必须在类定义外定义,MFC不能设置静态成员变量吗?
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2017-12-09 05:15
社区公告
暂无公告