深入VC回调函数的使用详解

軒轅長樂

軒轅長樂

2016-02-19 08:59

今天给大家分享的是由图老师小编精心为您推荐的深入VC回调函数的使用详解,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!
回调函数说白了就是事件响应程序,Windows的每个消息可以理解为一个事件,事件的响应代码要由用户自己来定义。用户定义了事件响应的代码,但还要Windows知道这段代码的位置(要不然Windows就不知道如何去调用,这也没有用),于是用户需要将回调函数的指针告诉Windows,最典型的例子是在窗口类的结构(WNDCLASS)中给lpfnWndProc分量赋回调函数指针值。

回调函数的参数格式是由回调函数的调用者(一般是Windows)来定义的,而回调函数的实现者必须遵循这种格式。Windows程序是以事件驱动模型为基础的,这就必然要用到回调函数这种机制。

要透彻了解回调函数,多看看SDK Samples。而MFC中的消息映射机制已经将窗口消息响应的回调函数隐藏起来了,这也符合C++的编程思想,回调函数终究是一种全局函数,它不能在类中实现,而消息映射机制的目的是使消息响应的代码最终封装在窗口类(CWnd类的子类)中。

如果有时间,不妨看看MESSAGE_MAP宏,消息映射是回调函数,只是这种回调函数的用法不同而已。普通的回调函数是要你提供地址,传进某个函数,由它去调用;而消息映射函数,却是由你定义函数,由MESSAGE_MAP宏去取得地址,并实现它的调用。

回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给调用者从而实现调用。要实现回调,必须首先定义函数指针。尽管定义的语法有点不可思议,但如果你熟悉函数声明的一般方法,便会发现函数指针的声明与函数声明非常类似。
CODE:
代码如下:

#include "stdafx.h"
#include "stdio.h"
void (*fun1)();
void A()
{
 printf("fun1/n");
}
void caller(void(*fun1)())
{
 printf("fun1 start/n");
 fun1();
 printf("fun1 end/n");
}
bool func2(int * i)
{
 printf("From func2() = %d, Hello World!/n", (*i)++);
 return true;
}
void caller2(bool func2(int *),int *j)
{
 func2(j);
}
int main(int argc, char* argv[])
{
 printf("From main(), Hello World!/n");
 printf("/n");

 caller(A);
 int i = 0;
 for (int j = 0; j 10; j++)
 {
  caller2(func2, &i); //* 传递函数地址到调用者 */
 }

 getchar();

 return 0;
}

展开更多 50%)
分享

猜你喜欢

深入VC回调函数的使用详解

编程语言 网络编程
深入VC回调函数的使用详解

使用回调函数(VC & Delphi)

编程语言 网络编程
使用回调函数(VC & Delphi)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

声明函数指针并实现回调

C语言教程 C语言函数
声明函数指针并实现回调

回调函数与Delphi的事件模型

Delphi
回调函数与Delphi的事件模型

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

C/C++中回调函数初探

编程语言 网络编程
C/C++中回调函数初探

ajax回调函数参数传递正确方法

Web开发
ajax回调函数参数传递正确方法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

巧妙设置Win8.1临时文件夹路径的方案

巧妙设置Win8.1临时文件夹路径的方案

Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能(附源码)

Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能(附源码)
下拉加载更多内容 ↓