• [原创]通过函数指针实现事件消息处理


    经过下面几个步骤可以实现通过函数指针实现事件消息处理:

    步骤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
    ",result);
    //输出方式2:
    char output[128];
    sprintf_s(output, "结果是:%d
    ", result); OutputDebugStringA(output);
    结果是:7

     源码下载:https://pan.baidu.com/s/1RXJkGmdaeufMDUO8FvC8_g

    编译环境:VS2008 IDE,VC++,Win7 32位

  • 相关阅读:
    GO学习之 为什么选择GO
    Flask学习之 Jinja2模板引擎
    排序算法之归并排序的python实现
    排序算法之快速排序的python实现
    排序算法之希尔排序的python实现
    排序算法之插入排序的python实现
    排序算法之选择排序的python实现
    Android 中正则表达式工具类
    java之从字符串比较到==和equals方法区别
    Android Studio酷炫插件(一)——自动化快速实现Parcelable接口序列化
  • 原文地址:https://www.cnblogs.com/rainbow70626/p/8883654.html
Copyright © 2020-2023  润新知