给你讲过实用点的,在MFC中很多都是回调函数,都是通过事件触发的,
但是我们在写程序的时候也经常用到自己写的回调函数,回调函数和一般函数体一样
只不过在调用的时候是给触发条件传入一个函数指针
由这个函数指针指向你自己的回调函数
然后由你设置的这个条件去调用你自己写的回调函数
也就是你可以自己写个函数,然后在里面用一个指向函数的指针指身一个回调函数
当然在这个函数被调用的时候也就会去调用你定义的回调函数了
举个例给你看
我们在使用键盘钩子的时候就会用到一个回调函数
// 回调函数指针
typedef BOOL (CALLBACK* LPFNKEYBOARDPROC)(WPARAM, KBDLLHOOKSTRUCT*);
LPFNKEYBOARDPROC g_lpfnKeyboardProc; // 键盘钩子回调函数指针
// 底层键盘钩子函数
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode >= HC_ACTION)
{
KBDLLHOOKSTRUCT* pStruct = (KBDLLHOOKSTRUCT*)lParam;
if (g_lpfnKeyboardProc(wParam, pStruct))//注意这里的g_lpfnKeyboardProc是一个函数指针,指向一个函数,在我们判断这个函数指针的时候其实也就调用了我们定义的回调函数,当然这个函数的函数体没有写出来了
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
else
return true;
// 调用系统中的下一个钩子
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
void SetHook(LPFNKEYBOARDPROC lpfnKeyboardProc)
{
g_lpfnKeyboardProc = lpfnKeyboardProc;//安装的时候传入一个函数指针
g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, g_hInstance, NULL); //这里用到的LowLevelKeyboardProc就是一个回调函数,它是在我们设置这个键盘钩子的时候被调用
其函数体在上面,和我们普通函数是一样的
}
标签:怎么回事,函数,回调