• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > MFCDLL中如何绑定OCX事件

MFCDLL中如何绑定OCX事件

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了ocx事件,ocx添加事件,mscomctl.ocx,comdlg32.ocx,ocx控件安装等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: MFC DLL中如何绑定OCX事件
描述:

各位:
  我有一个关于MFC 创建的DLL,这个DLL通过MFC Typelib的方式加入了一个OCX,我的OCX包括方法和事件2部分
现在的DLL中已经有了方法和事件的2个.h文件,里面定义了OCX的方法接口和event接口,方法接口直接在DLL中调用即可以
现在我的疑问是:
    我需要通过怎么样的形式去使用OCX的event接口了,因为我调用ocx的方法接口后,需要通过判断相应的事件接口是否触发来做下一步的处理..我怎么在DLL中去绑定这个事件了,我也查阅了一些资料,说是用事件绑定,没看太明白,热心的朋友贴了些代码,但小弟是新手,对COM这些都不了解,哪位大哥可以帮我写个绑定事件的类,帮我解释一下了?我可以提供OCX的IDL文件或者用TypeLib方法生成的ocx的.h文件。再贴一位热心朋友给的示范代码,小弟愚笨,没看太明白,希望各位朋友可以解释下。
code:
//EventSink.h 
#import "..\Server\Debug\Server.exe" raw_interface_only,no_namespace,named_guids 
class CEventSink : 
public IDispEventImpl <0, CEventSink,&DIID__IObjEvents,&LIBID_SERVERLib, 1, 0> //这个类的传入参数是什么意思了?
{ 
public: 
CEventSink() 
{ 
} 
public: 
BEGIN_SINK_MAP(CEventSink) 
  SINK_ENTRY_EX(0, DIID__IObjEvents, 1, cbFunc01) //这里的参数又是什么意思了?
END_SINK_MAP() 
STDMETHOD(cbFunc01)(); 
}; 
//EventSink.cpp 
#include "stdafx.h" 
#include "EventSink.h" 
STDMETHODIMP CEventSink::cbFunc01() //还有这个函数
{ 
AfxMessageBox("called by Event from dll Server !"); 
return S_OK; 
} 
// ClientDlg.cpp : implementation file 
// 
#include "EventSink.h" 
void CClientDlg::OnButton1() 
{ 
// TODO: Add your control notification handler code here 
::CoInitialize(NULL); 
{ 
  IObjPtr pObj; 
  CEventSink *pEventSink= new CEventSink; 
  pObj.CreateInstance(__uuidof(Obj)); 
  pEventSink->DispEventAdvise(pObj); 
  pObj->Func01(); 
  pEventSink->DispEventUnadvise(pObj); 
  delete pEventSink; 
} 
::CoUninitialize(); 
}
期待热心朋友可以给上面这个代码加点注释,呵呵,万分感激!100分不多,如果可以帮助我解决,我可以再加分的!


解决方案1:

http://www.pcppc.cn/kaifa/VCjiaocheng/kaifa_115699.html

解决方案2:

1楼给的是ATL的做法,在MFC中不适用,MFC有没有简单方法我不太清楚,但自己可以从IDispatch派生一个类,实现它的所有7个方法,然后通过组件查询IConnectPointContainer接口再寻找IConnectPoint接口,然后把派生类的实例指针Advise到连接点上即可。

解决方案3:

自己实现一个连接点对象类似的,继承与 IDispEventImpl ,因而需要传入一些你的信息作为参数等来实现
SINK_ENTRY_EX(0, DIID__IObjEvents, 1, cbFunc01) //绑定事件和对应的函数
STDMETHODIMP CEventSink::cbFunc01() //就是你希望回调的函数


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ocx主动传递参数事件
  • 怎么在OCX的事件里面传递内存(指针)
  • 网页ocx事件
  • ocx的事件网页捕捉
  • 用一个类调用ocx类里面的事件该怎么调用?
  • 如何在OCX里面定义事件并提供给javascript响应
  • typelibocx得到的ocx事件接口如何调用?
  • OCX中调用OCX中的方法和事件如何能成功再追加100分在线等
  • 怎么将Ocx中的事件在exe程序里面添加
  • 网页接收ocx事件返回的字符串丢失一位

相关文章

  • 2017-06-04 在word里面控制线的属性问题!
  • 2017-06-04 控件怎样与子窗口通信
  • 2017-06-05 如何得到其他进程里MSFlexGridWndClass表格控件里的内容
  • 2017-06-04 请问:如何获得word文档的总页数以及当前页码?
  • 2017-06-04 如何用VC创建COM?
  • 2017-06-05 SNMP程序安装打包问题:怎样把windows的snmp服务包含到安装包里面?
  • 2017-06-05 BHOToolBar中多个按钮的响应问题
  • 2017-06-04 求纯C++播放Flash
  • 2017-06-04 我需要《深入解析ATL》的配好程序代码,谁有请给我发一分,谢谢!
  • 2017-06-05 求大虾,关于webbrowser控件

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 不调CoUninitialize会否有问题?
    • 调用dll出错啦?????????!!!!!!!!!!!
    • 一个关于Semaphore的问题
    • 关于跨工程调用类
    • 有人能解释一下uuid的含义么
    • 高手帮忙,怎样在ATL中加一个返回值为非HRESULT的接口方法(我快急死了)
    • 如何将PPT显示在指定窗口中
    • 新手问题,请问类工厂对象和COM类是什么关系啊?
    • 是不是c++无法调用WSUSAPI呢?
    • 哪位帮我看看这儿哪儿错了!

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有