在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;
}
}
...全文
295 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2017-12-10
  • 打赏
  • 举报
回复
回调函数要用静态成员函数,要修改类成员变量的话,你可以从全局获取到对应的类对象指针进行修改,如使用AfxGetMainWnd 、AfxGetApp等获得
mfkinfo 2017-12-09
  • 打赏
  • 举报
回复
把涉及到的变量都设置成静态的可以实现,但是必须在类定义外定义,MFC不能设置静态成员变量吗?

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧