回调函数为ActiveX控制类外的全局函数,在做Voip消息处理的时候基本都需要回调函数,而在这全局的回调函数中怎么处理ActiveX控件类的要触发的事件呢。下面给出一个简单的方法。
在事件控制类中创建一个窗口,传入this指针。保存该窗口的句柄为全局变量,在回调函数中发送消息至窗口,在窗口中在进行事件响应处理,代码如下:
在CXXXActiveXCtrl.cpp中添加代码:
HWND m_hMyWnd;
int CXXXActiveXCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
pwnd = new CMyDialog;
pwnd->m_pCtrl = this;
pwnd->Create(IDD_MYDIALOG_DIALOG, this);
m_hMyWnd = pwnd->m_hWnd;
return 0;
}
在回调函数中添加代码:
void CallBack(CallEvent* pCallEvent)
{
switch(pCallEvent->myEventType)
{
case CALLBACK_REG_STATUS:
switch(pCallEvent->myRegStatus.Value)
{
case REG_REGISTERING:
::PostMessage(m_hMyWnd, WM_THREADEVENT, NULL, (LPARAM)int(100));
//WM_THREADEVENT为自定义消息
break;
}
}
}
mydialog.h中添加代码:
LRESULT OnFireThreadEvent(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
mydialog.cpp中添加代码:
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
//{{AFX_MSG_MAP(CMyDialog)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_THREADEVENT, OnFireThreadEvent)
END_MESSAGE_MAP()
LRESULT CMyDialog::OnFireThreadEvent(WPARAM wParam, LPARAM lParam)
{
switch((int)lParam)
{
case 100:
m_pCtrl->FireOnRegisting();
break;
}
}
以上是以一种间接的消息传递形式实现的回调函数中响应控件事件的方法,我在控件方面做得工作不多,有更好或者更直接的方法的可以告诉我一下:)heeb123@gmail.com