简单实现回调函数

11 篇文章 0 订阅
4 篇文章 0 订阅

//回调函数

//B.h文件

//回调函数参数结构体
struct tagCallbackParam 
{
public:
    bool        m_bParam0;
    int         m_nParam1;
    CString     m_szParam2;
    tagCallbackParam()
    {
        m_bParam0 = false;
        m_nParam1 = 100;
        m_szParam2 = _T("100");
    }
};

class CB
{
public:
    CB();
    virtual ~CB();
    typedef void(*CallbackPrototype)(LPVOID lp, const tagCallbackParam& rParam);
    void Register(CallbackPrototype pCallBackfun, LPVOID lp);
    void Caller();
private:
    CallbackPrototype m_pFun;
    LPVOID m_lp;
    tagCallbackParam  m_callbackParam;
};
//B.cpp文件
//............
void CB::Register(CallbackPrototype myCallBackfun, LPVOID lp)
{
    //注册回调函数(/类似注册事件)
    m_pFun = myCallBackfun;
    m_lp = lp;
}

void CB::Caller()
{
    //实现一些操作信息
    //..............
    m_callbackParam.m_nParam1++;
    m_callbackParam.m_szParam2.Format(_T("参数2=%d"),m_callbackParam.m_nParam1);
    //触发回调函数(/类似触发事件)
    m_pFun(m_lp, m_callbackParam);
}
//A.h文
//-此处我使用的是窗口类(Dialog.h)
#include "B.h"
//.........
class CA
{
public:
    //............窗口类的一堆声明。
    CB m_cb;
    //回调函数,参数列表,返回值必须和回调函数原型一样,必须是静态,方便在初始化InitDialog时注册。
    static void CallBackDefine(LPVOID lp, const tagCallbackParam& rParam);  
}
//A.cpp
//-此处我添加了两个EditControl(显示参数信息),一个Button(负责触发回调函数)

BOOL CA::OnInitDialog()
{
    //......窗口初始化一大推
    m_cb=B();
    m_cb.Register(CallBackDefine,this);
}

//回调函数具体实现
void CA::CallBackDefine(LPVOID lp, const tagCallbackParam& rParam)
{
    CA* pDlg = (CA*)lp;
	if (pDlg)
	{
		CString szParam1Value;
		szParam1Value.Format(_T("参数1=%d"), rParam.m_nParam1);
		pDlg->GetDlgItem(IDC_EDIT1)->SetWindowTextW(szParam1Value);
		pDlg->GetDlgItem(IDC_EDIT2)->SetWindowTextW(rParam.m_szParam2);
	}
}

void CA::OnBnClickedButton1()
{
    m_cb.Caller();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值