这几天在开发过程中遇到一个问题,即在网页中无法响应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
分享到:
相关推荐
首先,ActiveX控件是Microsoft提出的一种组件对象模型(COM),它允许开发者创建可重用的软件组件,这些组件可以嵌入到各种应用程序中,如网页、桌面应用等。ActiveX控件基于OLE(Object Linking and Embedding)...
在IT领域,ActiveX控件是一种基于微软技术的组件,用于在Windows应用程序中提供交互式功能,特别是网页浏览器。ActiveX控件可以是各种形式,如按钮、文本框或者更复杂的用户界面元素。它们通常由程序员用Visual ...
VCL库包含了一些预定义的ActiveX控件,可以直接在Delphi项目中使用,同时也提供了创建自定义ActiveX控件的工具和类。 3. **ActiveX控件创建**:在Delphi中,可以使用`TActiveXControl`组件或`TComObject`类来创建...
ActiveX控件是一种更为复杂且功能强大的控件类型,支持更多的事件响应和自定义选项。它们通过点击菜单“视图”->“工具栏”,在弹出菜单上选择“控件工具箱”来访问。从Excel 97开始,随着UserForm的引入,ActiveX...
- **定制事件**:开发者自定义的事件,用于响应特定的操作或状态变化。 #### 事件映射 事件映射是将事件与控件类的成员函数关联起来的过程。在MFC中,这通常通过在控制类的头文件中定义特定的宏来实现,例如`BEGIN...
- **事件处理**:VB中的ActiveX控件支持事件驱动编程,当用户与控件交互时,会触发特定的事件,开发者可以编写代码响应这些事件。 - **属性与方法**:每个ActiveX控件都有自己的属性(设置和获取对象特征)和方法...
3. **属性与事件处理**:每个ActiveX控件都有一组属性和事件,可以通过设置属性值或响应事件来控制控件的行为。 #### 总结 通过动态加载ActiveX控件,开发者可以在VB6.0中实现更灵活、高效的应用程序开发。掌握这...
在MFC中,ActiveX控件通过COleControl类作为基础,该类提供了许多内置功能,如事件处理、属性页支持、自动化服务器等,大大简化了控件开发过程。 OleEdit是一个示例性的文本编辑控件,它可能包含诸如文本输入、格式...
"Excel-VBA实用技巧范例-Excel工作表的ActiveX控件对象事件"这个压缩包文件显然是关于如何利用VBA处理Excel工作表中ActiveX控件的事件的实例教程。 ActiveX控件是Excel中一种可编程的对象,它们可以添加到工作表中...
在VC2005中,首先创建一个新的项目,选择“Visual C++”-“MFC”中的“MFC ActiveX控件”。输入解决方案和项目名称,例如“activexdemo1”和“activexdemo”。在向导的配置页面,可以选择是否生成运行时许可证,这...
5. **自定义事件**:通过编程,开发者可以响应表格中的各种事件,比如单元格更改、选择变化等,从而实现复杂的业务逻辑。 6. **性能优化**:尽管ActiveX控件可能面临一些性能问题,但彩色表格控件通常会进行优化,...
在VBA中使用ActiveX控件,首先要了解它们的基本属性、方法和事件。属性定义了控件的外观和行为,如大小、颜色、文本等;方法是控件可以执行的动作,如Click事件对应于用户点击按钮的操作;事件则是在特定情况(如...
在本主题“基于MFC的ActiveX控件开发(JS传递变量数据给控件)”中,我们将探讨如何使用MFC创建一个ActiveX控件,并通过JavaScript与网页进行交互,传递变量数据。 首先,你需要安装Visual Studio 2010或更高版本,...
ActiveX控件是一种在Windows操作系统环境下使用的技术,它允许开发者创建可嵌入到网页或应用程序中的小型软件组件。这些控件可以提供各种功能,如播放音频、视频,显示动画,或者像本例中的"Clock",实现时钟功能。...
在Delphi编程环境中,Active Form(活动窗体)是一种特殊的技术,它允许将窗体类嵌入到ActiveX控件(OCX)中,以便在其他应用程序或网页中使用。本教程将深入探讨如何在Delphi中使用Active Form函数以及创建自定义...
### VC++编写ActiveX控件 #### 一、ActiveX控件概述 ActiveX控件是一种软件组件,它遵循微软的COM...ActiveX控件不仅可以在多种编程环境中使用,还能实现跨语言的互操作性,极大地提高了开发效率和代码的可维护性。
通过分析和研究这些源码,开发者可以了解如何创建自定义的ActiveX控件,以及如何在不同环境中集成和使用它们。 描述中的".zip"表明这是一个压缩文件,可能包含了一组文件或目录。在这种情况下,"Lesson18Code"可能...
ActiveX控件是一种在Windows平台上广泛使用的组件技术,它允许开发者创建可嵌入网页或应用程序中的小型软件模块。ActiveX控件开发是Windows编程的重要部分,尤其在开发交互式网页和桌面应用程序时。本篇文章将深入...
ActiveX控件的事件是通过触发并调用自动化对象的方法来实现的,而方法和属性分为自定义和库存两类。 开发ActiveX控件时,首先需要创建工程框架。利用MFC的"ActiveX Control Wizard"向导,可以快速生成基础结构,...
ActiveX控件能够提供自定义和库存的属性、方法及事件,这使得开发人员可以根据具体需求定制控件行为。 #### 二、建立工程框架 创建ActiveX控件工程的第一步是使用MFC ActiveX Control Wizard向导。通过这个向导,...