回调函数是当发生某种事件时,系统或者其他函数将会自动调用定义的一段函数。回调函数在Windows编程使用的场合很多,如Hook回调函数、MouseProc、GetMsgProc以及EnumWindows、DrawState回调函数等,还有很多系统级的回调函数。
首先需要声明回调函数的类型:
typedef int (WINAPI *PFCALLBACK)(int Param1,int Param2)
实际上是声明了一个返回值为int,传入参数为两个int的指向函数的指针。
由于C++和PASCAL编译器对参数入栈和函数返回的处理有可能不一样,把函数类型用WINAPI(WINAPI宏展开就是__stdcall)或stdcall统一修饰。
声明回调函数的原形:
int WINAPI CBFunc(int Param1,int Param2);
以上函数为全局函数,如果要使用一个类里的函数作为回调函数原形,则把该类函数声明为静态函数即可。
回调函数的调用只需要调用回调函数的函数名传入调用函数即可实现。
使用回调函数的编程模式,可以根据不同的需求传递不同的回调函数地址,或定义各种回调函数的原形(同时也需要改变使用回调函数的参数和返回值约定),实现多种回调事件处理,可以使程序的控件灵活多变,也是一种高效率的、清晰的程序模块间的耦合方式。