• 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 > 关于控件事件问题

关于控件事件问题

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

佚名通过本文主要向大家介绍了c#自定义控件事件,textbox控件事件,c#控件事件,控件事件,c#动态添加控件事件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 关于控件事件问题
描述:

我在对话框中创建一个控件,通过IConnectionPoint和IConnectionPointContainer等接口连接到自己实现事件处理类,请问如何让对话框也能得到处理后的结果呢?


解决方案1:

为了在组件对象和客户之间提供更大的交互能力,组件对象也需要主动与客户进行通信。组件对象通过出接口(Outgoing Interface)与客户进行通信。如果一个组件对象定义了一个或者多个出接口则此组件对象叫做可连接点对象。 
  所谓出接口也是COM接口。每个出接口包含一组成员函数,每个成员函数代表了一个事件、一个通知或者一个请求。但是这些接口是在客户的事件接收器(sink)中实现的,所以叫出接口。事件接收器也是COM对象。 
  可连接对象必须实现一个IConnectionPointContainer接口用于管理所有的出接口。每个出接口对应一个连接点对象,连接点对象实现了IConnectionPoint接口。客户正是通过IConnectionPoint接口与可连接对象建立连接。每一个连接用CONNECTDATA结构描述。 
  CONNECTDATA包含两个成员:IUnknown* pUnk和DWORD dwCookie。pUnk对应于客户中事件接收器的IUnknown接口指针;dwCookie是由连接点对象生成的用于唯一标识此连接的32位整数。 
  通过一个由可连接对象实现的枚举器接口IEnumConnectionPoints,客户可以访问可连接对象的所有连接点。但是要获得IEnumConnectionPoints接口指针,要通过IConnectionPointContainer::EnumConnectionPoints(IEnumConnectionPoints**)函数,此函数返回枚举器接口指针。 
  通过另一个有可连接对象实现的枚举器接口IEnumConnections,无论客户还是可连接对象都可以访问一个连接点上的所有连接。通过IConnectionPoint::EnumConnections(IEnumConnections**)函数可以获得IEnumConnections接口指针。 
  综上所述,一个可连接对象必须实现四个接口:IConnectionPointContainer、IConnectionPoint、IEnumConnectionPoints、IEnumConnections。这四个接口的定义请阅读MSDN文档。 
  现在结合后面的示例简单描述一下可连接对象和客户通信的过程。在后面的示例中,可连接对象ConnObject定义了出接口IEventSink,对应此出接口,实现了一个连接点对象SampleConnPoint(此对象实现了对应于出接口的连接点接口IConnectionPoint,接口ID为IID_IEventSink)。 
  1.客户在获取了可连接对象的IUnknown接口指针m_pIUnknown后,调用m_pIUnknown->QueryInterface(IID_IConnectionPointContainer,(void**)&pConnPtCont);如果调用成功,pConnPtCont中将存放可连接对象的IConnectionPointContainer接口指针。如果调用不成功,则表明对象不是可连接对象。 
  2.调用pConnPtCont->FindConnectionPoint(IID_IEventSink,&pConnPt)。如果调用成功,pConnPt将存放对应于出接口IEventSink的连接点对象SampleConnPoint所实现的连接点接口IConnectionPoint指针;如果调用不成功,说明可连接对象不支持出接口IEventSink。 
  3.调用pConnPt->Advise(pIEventSink,&m_dwCookie)以建立事件接收器(EventSink)与连接点的连接。其中pIEventSink是客户事件接收器IUnknown接口的指针,此指针通过此函数传递给了可连接对象以便可连接对象发起对客户的通信;m_dwCookie是连接标识,此值由可连接对象设置由客户保存,客户还要使用此值以断开连接。 
  4.可连接对象可以通过连接点调用客户事件接收器中的方法。在客户与连接点成功建立连接后,连接点中已经保存了客户事件接收器接口的指针并可以调用pConnPt->GetConnections()来获取。 
  5.客户调用pConnPt->Unadvise(m_dwCookie)来取消连接,同时调用pConnPt->Release()释放连接点对象。 
2、编程实例 
  现在用MFC实现一个可连接对象,然后写一个极为简单的客户和时间接收器。 
  需要说明的是,MFC通过CCmdTarget类实现了IConnectionPointContainer和IEnumConnectionPoints接口,此外,通过CConnectionPoint类实现了IConnectionPoint接口 
...........
http://www.vczx.com/article/show.php?id=484


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

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

  • 关于控件中的事件问题
  • 通过事件连接点获得控件的事件通知的困惑
  • mfcactivex控件里面有调度映射和事件映射,他们什么区别?
  • 关于控件事件不响应的问题
  • 如何在一个控件响应事件时调用另一个控件中的方法?
  • 关于复合控件的事件
  • VCActiveX控件的事件实现方法
  • 如何获取iwebbrowser2控件的链接点击事件sdk
  • 关于控件事件的一个疑问!
  • 如何在设计模式下响应控件事件

相关文章

  • 2017-06-05 一个简单的LINK问题LNK2019
  • 2017-06-05 进程监控器,保证程序不死。
  • 2017-06-05 一个wordCom插件,注册了以后,删除dll后,无法卸载了吗?
  • 2017-06-05 怎样监控一个应用程序的进程是否结束
  • 2017-06-05 哪们兄弟有JThread,JMutexC++的,不是Java版的源码
  • 2017-06-05 如何发布Release或Debug中的EXE文件?
  • 2017-06-04 同一个标记在不同的库里表达意思不同导致冲突,无法编译;怎样解决?
  • 2017-06-05 请问一个线程可以使用堆里面的多少内存,栈里的多少内存?
  • 2017-06-04 请问我在combobox里面处理退格健,该怎么判断光标处什么哪个字符之间,怎么删去前一个字符呢?
  • 2017-06-05 如何用interrupt停止一个用CreateThread创建的阻塞线程

文章分类

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

最近更新的内容

    • 请大侠帮忙---COM编程
    • VARIANT或COleVariant如何转成CString?
    • 一个程序让另一个程序的窗口最大化
    • CALLBACK函数与线程安全的问题
    • 把函数转化为线程函数发现了很多麻烦事!
    • 如何将如下函数,转化为com接口的成员函数:
    • 如何得到其他对象问题
    • 请问如何在ActiveX里实现不同画面的转移
    • 关于生成动态库的错误
    • 在html文件中如何响应ActiveX控件的事件

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

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