//回调函数
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;
};
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);
}
#include "B.h"
class CA
{
public:
CB m_cb;
static void CallBackDefine(LPVOID lp, const tagCallbackParam& rParam);
}
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();
}