`
mybwu_com
  • 浏览: 178607 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

网页中响应ActiveX控件自定义事件

 
阅读更多

这几天在开发过程中遇到一个问题,即在网页中无法响应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作同步更新。如需转载,请保留本段文字,并发邮件通知:

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/karman/archive/2006/04/09/656088.aspx

分享到:
评论

相关推荐

    VB6.0动态加载ActiveX控件漫谈

    ---- 通过Controls.Add方法添加的ActiveX控件一定不能在该工程中有该控件的任 何引用,否则系统将出错。 四、小结 ---- 通过使用动态加载ActiveX控件使用庞大的应用程序变得很小,将不同的 ActiveX控件进行各种...

    标准MFC WinSock ActiveX控件开发实例

    主要介绍如何开发一个ActiveX控件,提供接口,与相应事件挂钩。文中涉及到VARIANT,SAFEARRAY,BSTR的详细使用方法。 另外还提供了WinSock的详细开发步骤,以及如何响应网络超时,网络断开的事件方法以及在VC,VB...

    毕业设计论文参考 Web实时客服系统

    摘 要:ActiveX 控件是一...ActiveX 控件可以在自身的窗口中进行绘述,可以响应事件,并可以通过一个包括属性和方法的接口进行管理,这些属性和方法与自动化对象相似。 关键词:ActiveX 控件, MFC, ATL,语音,Internet

    vc实例精通源码,windows基本控件的使用Demo

    03_ActiveXInDlg 在应用程序中使用ActiveX控件。 04_ActiveXInWeb 在浏览器中使用ActiveX控件。 05_MyActiveX3 在VC中显示动态的GIF动画。 06_RegOCX 在程序中注册和注销ActiveX控件。 第18章(\ Chapter...

    Visual C++实践与提高-COM和COM+篇『PDF』

    5.3 在Vsual C++中使用ActiveX控件——例程VCActiveX 5.3.1 创建ActiveX控件包容器程序 5.3.2 加载ActiveX控件 5.3.3 设计时访问控件的属性 5.3.4 运行时访问控件的属性和方法 5.3.5 处理控件的事件 5.4 在Visual ...

    Visual C++2010开发权威指南(共三部分).part1.rar

    11.5 Activex控件事件开发 461 11.5.1 添加常用事件 462 11.5.2 添加自定义事件 463 11.6 Activex控件方法开发 464 11.6.1 添加常用方法 465 11.6.2 添加自定义方法 465 11.6.3 从方法返回错误代码 466 11.7 完整...

    webprint 一个全面强大的web打印的解决方案

    WebPrint是一个全面强大的web... WebPrint内含一个在vc7.0上开发的ActiveX控件(只有75k), 这个控件主要实现对打印参数的控制,webprint使用户通过JavaScript脚本可以控制自定义纸张尺寸,打印方向,页边距等等属性。

    VC++2010权威开发指南+源代码

     第11章 VisualC++2010MFCActiveX控件  第12章 VisualC++2010MFC文件与注册表操作  第13章 VisualC++2010MFC数据库开发  第14章 VisualC++2010MFC多线程程序设计  第15章 VisualC++2010MFC网络程序设计  第16...

    VC++2010权威开发指南+源代码.part2

     第11章 VisualC++2010MFCActiveX控件  第12章 VisualC++2010MFC文件与注册表操作  第13章 VisualC++2010MFC数据库开发  第14章 VisualC++2010MFC多线程程序设计  第15章 VisualC++2010MFC网络程序设计  第16...

    VC++常用的共用函数100多页

    问:如何增加视图中ActiveX控件的事件处理函数? 75 问:如何创建一个动态的Tree控件? 75 问:SDI程序开始时不打开文档? 75 问:List控件中整栏选择? 75 问:如何重载MRU文件? 76 问:CImageList控件中图象橙色被显示...

    VC++常用功能实例

    问:如何增加视图中ActiveX控件的事件处理函数? 75 问:如何创建一个动态的Tree控件? 75 问:SDI程序开始时不打开文档? 75 问:List控件中整栏选择? 75 问:如何重载MRU文件? 76 问:CImageList控件中图象橙色被显示...

    VBScript介绍手册

    1.2.3 网页、网站及其相关概念 1.2.4 对象的事件、属性和方法 1.2.5 HTML简介 1.2.6 客户端和服务器端的脚本语言 1.2.7 ActiveX组件简介 1.2.8 脚本引擎 第2章 VBScript基础 2.1 使用VBScript 2.1.1 VBScript及其...

    VC学习大纲 VC学习讲义

    ActiveX控件的应用与工作原理,ActiveX控件的编写,如何为控件安排属性,方法,事件,属性页,持久性存储。如何注册控件与取消控件注册。如何测试与调试控件。 第二十课: 综合答疑与一些高深主题的介绍,包括如何...

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf

    1.5.5 在visual studio 2010中记录和使用宏 55 1.5.6 类图 57 1.5.7 应用程序生命周期管理 58 1.5.8 性能工具 60 1.6 小结 62 第2章 对象和visual basic 63 2.1 面向对象的术语 64 2.1.1 对象、类和...

    dreamweaver的各种组件

    QuickTime Object 有了这个插件,您就可以在Dreamweaver中方便地插入QuickTime文件, 程序能自动调用相关的ActiveX,就象插入flash文件一样简单。 Awbanner 插入一会定时变换图形与连结的banner, 可设定五组连结, ...

Global site tag (gtag.js) - Google Analytics