经过下面几个步骤可以实现通过函数指针实现事件消息处理:
步骤1:在某一个.h文件中定义以下函数指针类型MouseCLick,比如在CallbackEventModel.h文件中添加如下代码:
typedef int (*MouseCLick)( int a, int b);
步骤2:在需要使用事件的类中定义一个MouseCLick类型的函数指针:
下面的类CallbackUser是需要实现事件的的类:
===========================================================头文件===================================================================
#pragma once#include "CallbackEventModel.h"//包含函数指针类型定义所在的头文件class CallbackUser{public: int _a; int _b; MouseCLick _InvokerFun;//在需要使用事件的类中定义一个MouseCLick类型的函数指针public: CallbackUser( int a, int b); CallbackUser(void); ~CallbackUser(void);};===========================================================实现文件===================================================================#include "StdAfx.h"#include "CallbackUser.h"CallbackUser::CallbackUser(void){ _a=0; _b=0;}CallbackUser::CallbackUser( int a, int b){ _a=a; _b=b;}CallbackUser::~CallbackUser(void){}
步骤3:定义函数指针所绑定的事件处理函数CallbackFunction:
int CallbackFunction(int a, int b){ return a+b;}
步骤4:在需要调用的地方和时候实例化类对象,并将类中的函数指针具体绑定到待调用的事件处理函数上:
CallbackUser * caller=new CallbackUser(1,2);//类的实例化caller->_InvokerFun=CallbackFunction;//将类中的函数指针具体绑定到待调用的事件处理函数
步骤5:在需要调用的地方和时候发起事件处理函数的调用:
int result=caller->_InvokerFun(3,4);//具体事件处理函数的调用//输出方式1:printf("结果是:%d\n",result);//输出方式2:char output[128];sprintf_s(output, "结果是:%d\n", result); OutputDebugStringA(output);
结果是:7
源码下载:
编译环境:VS2008 IDE,VC++,Win7 32位