VC回调函数定义和使用

 转自:http://www.cnblogs.com/tianlangshu/archive/2011/03/20/1989439.html

 

最近经常使用回调函数,有时感觉有点混乱,对回调函数理解不透,昨天花点时间深深品味了一下回调函数,写下博客记录一下,言规正转,VC中的定时器是一种特殊的回调函数,只要我们设置好了定时器,我们就不用管什么时候调用定时器处理函数,是操作系统负责调用,定时器的处理函数还是我们自己去写实现。

      为什么 要用回调函数呢,这个问题我也想过,现在先说说回调函数的定义 和使用,过下在回答为什么 要使用回调函数,

    下面这个例子是处理从一个普通的C++类CTest中把数据传到一个对话框类CTestCALLDlg中去,这里不能用消息来处理,因为消息只能处理线程和对话框之间的数据传输,对纯C++不起作用,这种情况 下,就只能用回调函数来处理了,

     在Test.h文件中CTest定义之前定义 typedef  bool (WINAPI * SendCmd)(WORD NodeID);用于声明一种指针类型,也就是后面要用到的回调函数类型,在在Test.h文件中定义一个成员函数void Testcall(SendCmd);注意这个成员函数的参数,在Test.cpp中:

void CTest::Testcall(SendCmd Sd)
{
 Sd(10);

}

在CTestCALLDlg.cpp中写下回调函数SendCmdt 的实现部分 和 OnBnClickedButton1事件调用

bool _stdcall CALLBACK SendCmdt(WORD NodeID)
{
 return true;
}

void CTestCALLDlg::OnBnClickedButton1()
{
 // TODO: 在此添加控件通知处理程序代码
 CTest m_test;
 m_test.Testcall(SendCmdt);
}

此时程序运行,就进入了回调函数中去了,这样做的目的是把NodeID变量 的值从CTest类传到CTestCALLDlg类中,回调函数的一个好处是 在CTest 中不知道NodeID 有什么用,只能通过回调作用,传出来到要使用的地方进行处理,只是在回调函数声明时告诉系统有这么一个函数,实现部分在外面 。。。。 上面的问题也应该 不用回答了,,

     就写到这了, 文字写的不够流畅,希望回调函数的使用和作用表达清楚 了,呵呵

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值