VC回调函数定义和使用

 最近经常使用回调函数,有时感觉有点混乱,对回调函数理解不透,昨天花点时间深深品味了一下回调函数,写下博客记录一下,言规正转,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 有什么用,只能通过回调作用,传出来到要使用的地方进行处理,只是在回调函数声明时告诉系统有这么一个函数,实现部分在外面 。。。。 上面的问题也应该 不用回答了,,

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

原文地址:https://www.cnblogs.com/tianlangshu/p/1989439.html