设为首页收藏本站
搜索
开启左侧

[资料] MFC实现回调函数实例

[复制链接]
吴之听 发表于 2016-4-24 23:55:14 | 显示全部楼层 |阅读模式

黄金VIP|主题 |帖子 |积分 586

接着上贴这里介绍如何一步步具体实现 MFC实现回调函数
源码链接: http://pan.baidu.com/s/1i4Kfunj密码:ipza
1.新建一个MFC程序取名为mfcMyCallBack

在CmfcMyCallBackDlg.cpp中写下回调函数SendFunctionNamet 的实现部分 和 OnBnClickedButton1事件调用
int _stdcall CALLBACK SendFunctionNamet(int Add_num)
{
        return Add_num+1;
}



2.然后创建一个新的类CTest


在Test.h文件中CTest定义之前定义 typedef  int (WINAPI * SendFunctionName)(int Add_num);用于声明一种指针类型,
也就是后面要用到的回调函数类型,这里int Add_num相当于一个普通函数传递的参数,在Test.h文件中定义一个成员函数int (WINAPI * SendFunctionName)(int Add_num);

这里注意
        typedef  int (WINAPI * SendFunctionName)(int Add_num);
typedef一定要放在Test.h文件里面,因为不放在此处会导致
        int  Testcall(SendFunctionName Sd,int Add_num);
此函数声明中编译器不知道SendFunctionName是什么鬼。不能放在CmfcMyCallBackDlg.cpp文件里

////////////////////////////////////////
//Test.h文件
#pragma once

typedef  int (WINAPI * SendFunctionName)(int Add_num);

class CTest
{
public:

        CTest(void);
        ~CTest(void);
        int a;                                                                        //新建一个CTest成员变量
        int  Testcall(SendFunctionName Sd,int Add_num);        //新建一个CTest成员函数
};


/////////////////////////////////////////
//Test.cpp文件

#include "Test.h"

CTest::CTest(void)
{

}

CTest::~CTest(void)
{
}

int CTest::Testcall(SendFunctionName Sd,int Add_num)
{
        return Sd(Add_num);

}


3.最后添加一个Button1实现代码如下

void CmfcMyCallBackDlg::OnBnClickedButton1()
{
        // TODO: 在此添加控件通知处理程序代码
        CTest m_test;
        m_test.a=0;
        m_test.a=m_test.Testcall(SendFunctionNamet,99);
}

调试运行程序可以一步步观察调用过程,最终m_test.a会变成100;


51Halcon.com 专业机器视觉技术论坛
 楼主 吴之听 发表于 2016-4-25 00:22:48 | 显示全部楼层

黄金VIP|主题 |帖子 |积分 586

void CmfcMyCallBackDlg::OnBnClickedButton1()
{
        // TODO: 在此添加控件通知处理程序代码
        CTest m_test;
        CString str=NULL;

        m_test.a=0;
        m_test.a=m_test.Testcall(SendCmdt,12);
        str.Format( "%d",m_test.a);
        AfxMessageBox(str);
}
51Halcon.com 专业机器视觉技术论坛
ljtao 发表于 2016-5-8 23:36:24 | 显示全部楼层

黄金VIP|主题 |帖子 |积分 981

吴之听 发表于 2016-4-25 00:22
void CmfcMyCallBackDlg::OnBnClickedButton1()
{
        // TODO: 在此添加控件通知处理程序代码

吴老板讲的很好、、、、
51Halcon.com 专业机器视觉技术论坛
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

关闭

论坛推荐上一条 /5 下一条

Halcon技术
在线咨询
咨询热线
15019223858

小黑屋|手机版|Archiver|51Halcon机器视觉 | 粤ICP备15095995号-2|粤公网安备44030602000670号|   |

GMT+8, 2017-1-16 18:38 , Processed in 0.023474 second(s), 13 queries , Gzip On, Redis On.

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表