回调函数中响应MFC ActiveX事件的方法

回调函数为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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值