菜鸟是怎么练成的(四)
本文知识产权归karman所有,首发于博客中国(http://www.blogcn.com/blog/trackback.asp?mydiary=26596317),在CSDN作同步更新。如需转载,请保留本段文字,并发邮件通知:zhangmeng@sina.com
这几天在开发过程中遇到一个问题,即在网页中无法响应ActiveX控件自定义事件。经查资料后,明白ActiveX控件的事件如果要通过JavaScript等脚本语言响应,必须实现IProvideClassInfo或者IProvideClassInfo2接口。因为脚本语言必须通过这个接口获得控件的接口信息。
用MFC ActiveX Control Wizard生成的项目,其接口的实现是通过嵌套类完成,要实现IProvideClassInfo接口我们可以按下列步骤进行:
1. 在COleControl的继承类.h文件中加入代码:
BEGIN_INTERFACE_PART(ProvideClassInfo, IProvideClassInfo)
STDMETHOD_(HRESULT, GetClassInfo) (
/*[out] */ITypeInfo** ppTI
);
END_INTERFACE_PART(ProvideClassInfo);
2. 在COleControl的继承类.cpp文件中加入代码,并实现接口:
BEGIN_INTERFACE_MAP( CMetaKM_FC_BCtrl, COleControl )
INTERFACE_PART(CMetaKM_FC_BCtrl, IID_IProvideClassInfo, ProvideClassInfo)
END_INTERFACE_MAP()
ULONG FAR EXPORT CMetaKM_FC_BCtrl::XProvideClassInfo::AddRef()
{
METHOD_PROLOGUE(CMetaKM_FC_BCtrl, ProvideClassInfo)
return pThis->ExternalAddRef();
}
ULONG FAR EXPORT CMetaKM_FC_BCtrl::XProvideClassInfo::Release()
{
METHOD_PROLOGUE(CMetaKM_FC_BCtrl, ProvideClassInfo)
return pThis->ExternalRelease();
}
HRESULT STDMETHODCALLTYPE
CMetaKM_FC_BCtrl::XProvideClassInfo::QueryInterface (
REFIID iid, void FAR* FAR* ppvObj)
{
METHOD_PROLOGUE(CMetaKM_FC_BCtrl, ProvideClassInfo)
return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
}
HRESULT STDMETHODCALLTYPE
CMetaKM_FC_BCtrl::XProvideClassInfo::GetClassInfo (
/* [out] */ITypeInfo** ppTI
)
{
METHOD_PROLOGUE(CMetaKM_FC_BCtrl, ProvideClassInfo)
HRESULT hr;
LPTYPELIB typeLib;
CString str;
hr = pThis->GetTypeLib( LANG_USER_DEFAULT, &typeLib );
str.Format( _T("%x"), hr );
AfxMessageBox( str );
hr = typeLib->GetTypeInfo( 0, ppTI );
str.Format( _T("%x"), hr );
AfxMessageBox( str );
return hr;
}
如果是用ATL COM Wizard生成的工程,那么在New ATL Object时可以选择Full Control,该选项默认已经实现IProvideClassInfo2接口。如果选择其他轻量级ActiveX对象,那么实现IProvideClassInfo2接口也相当容易。
因为ATL COM Wizard生成的工程,对于接口的实现时通过多重继承完成的,只有在接口定义中加入继承IProvideClassInfo2即可。
1. 在接口定义中加入:
public IProvideClassInfo2Impl<&CLSID_MetaKM_FC_B, &DIID__IMetaKM_FC_BEvents, &LIBID_METAKM_FC_CTRLLib>
2.在BEGIN_COM_MAP(CMetaKM_FC_B)与END_COM_MAP()对中加入COM_INTERFACE_ENTRY(IProvideClassInfo)和COM_INTERFACE_ENTRY(IProvideClassInfo2)
本文知识产权归karman所有,首发于博客中国(http://www.blogcn.com/blog/trackback.asp?mydiary=26596317),在CSDN作同步更新。如需转载,请保留本段文字,并发邮件通知:zhangmeng@sina.com
菜鸟是怎么练成的(四)相关推荐
- 骆俊武:编程高手是如何练成的?
每个人都有成长的渴望,也都会遇到成长的瓶颈.下面这个问题是一个读者问我的: 如何才能训练成为一个编程高手? 先简单说下这个读者的背景:工作 3 年多,目前在大厂做后台开发,身边有不少编程高手,是他想要 ...
- 编程高手是如何练成的?
每个人都有成长的渴望,也都会遇到成长的瓶颈.下面这个问题是一个读者问我的: 如何才能训练成为一个编程高手? 先简单说下这个读者的背景:工作 3 年多,目前在大厂做后台开发,身边有不少编程高手,是他想要 ...
- 在线直播源码评论弹幕是如何“练”成的?
在线直播源码评论弹幕是如何"练"成的? 提起弹幕(dànmù),大家都会想到「视频弹幕」.视频弹幕是指网友们在观看视频的同时参与评论,即所谓"即时反馈", 评论 ...
- Python百练成钢002-计算自幂数
这是[Python 百练成钢]系列文章的第 002 篇,计划完成 100 道练习题. 本文环境:python3.8 计算自幂数 什么是自幂数? 自幂数:也叫超完全数字不变数.自恋数.阿姆斯特朗数(Ar ...
- 仿站高手是怎么练成的 分析仿站必备知识总结
仿站高手是怎么练成的 分析仿站必备知识总结 来源:http://hep6.com 作者:和平 现在的网站,真正原创设计的没有几个,都是我抄袭你,你抄袭我,再自己修改下,这可能跟中国的国情有关吧!抄袭网 ...
- 小强怎样练成——读《现代软件工程——构建之法》第三章有感
小强怎样练成 ----读<现代软件工程--构建之法>第三章有感 一.知道自己吃几碗干饭 先秦时期的"革命家"告诉我们"知人者智,自知者明",&quo ...
- 李小龙:超人是这样练成的
李小龙:超人是这样练成的 李小龙:超人是这样练成的 作者:约翰·立托 本文原载于美国<肌肉与健美>(Muscle. Fitness)杂志1994年3月号.<肌肉与健美>杂志由世 ...
- 著名弹跳训练法 练成可提高30cm
搜狐体育讯 怎样提高弹跳一直是广大篮球迷最关注的话题之一,下面我们就为大家推荐一种弹跳训练方法--美国最著名纵跳训练计划, 练成后预计纵跳能力(也就是原地弹跳)可以提高20到30厘米以上, 不过锻炼过 ...
- 牛逼的C/C++程序员是如何练成的?
这个题目的噱头太大,要真的写起来, 足够写一本书了. 牛耳人分享一些经验,希望能让初学的小伙伴少走弯路. 每个人的情况不一样,所以下面的描述可能并不适合每一个看到这篇文章的人. 一.C/C++语言 如 ...
最新文章
- 大推荐——家庭书架·成功读库系列
- ListView中添加Button后,Button的点击事件和ListView的点击事件冲突
- PHP算法使用__call优化代码
- 中国已消失的九所世界级大学
- 实现织梦dedecms百度主动推送(实时)网页抓取
- 图论 —— 环与块 —— 连通块的计数
- 【GCN】从文本分类来看图卷积神经网络
- Docker系列(二):Docker安装
- 游戏开发3D基础知识
- 实战案例:探索星巴克的世界分布
- springboot中得注解_SpringBoot 中的基本注解
- VMware利用unlocker开启MacOS支持
- ssh的发展历程与基本原理
- 第8周项目5:定期存款利息计算器
- 【风马一族_php】
- activeMQ基础学习和SpringBoot整合activeMQ案例
- 非此即彼的逻辑错误_英语逻辑错误一览
- gamepad android手柄,CF手游手柄怎么玩 CF手游怎么设置安卓手柄
- vbs新年祝福,怎么样
- 长期出差补助减半,这谁还愿意出差啊
热门文章
- 感谢vmware软件公司
- 四大组件之Service(三)-Service的跨进程调用
- 有重要的事在华为手机上如何设置提醒?
- 聚簇索引与非聚簇索引的区别以及SQL Server查询优化技术(评论很精彩)
- 李萨如(3)--- 随相位变的动画
- 宝宝无人看管? 谷歌婴儿监控AI来当保姆!
- TypeError: fit() missing 1 required positional argument: 'y'
- 树莓派驱动数码管c 语言,树莓派GPIO入门05-驱动数码管显示数字
- Python根据输入的公司编号、名称、网址,格式化输出公司信息。其中1)冒号统一为英文冒号,编号占6位,不足6位的前面补0。编号后面是制表符。
- 游戏SDK应用内悬浮窗的实现(三)