ActiveX控件开发小结

本文介绍了ActiveX控件的基本概念,它作为Microsoft COM技术的一部分,可在应用程序和网络中重复使用。开发过程包括使用VS2008创建MFC ActiveX工程,暴露接口和事件,以及测试控件接口。ActiveX控件的CLASSID在idl文件中可以找到,对话框控件的开发类似于MFC对话框程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ActiveX控件开发小结

一、ActiveX控件简介

ActiveX控件是Microsoft的ActiveX技术的一部分。ActiveX控件是可以在应用程序和网络中计算机上重复使用的程序对象。创建它的主要技术是Microsoft的ActiveX技术,其中主要是组件对象模型(COM)。ActiveX控件可以以小程序下载装入网页,也可以用在一般的Windows和Macintosh应用程序环境中。一般说来,ActiveX 控件代替了原先的OCX,它与JAVAapplet的概念和功能差不多。ActiveX控件可以由不同的可以识别Microsoft的COM技术的语言开发,它是一个组件或自包含的软件包,它可以在同一个或分布式的计算环境中开发或使用。COM的分布式支持技术称为DCOM。在实现中,ActiveX控件是一个动态链接库(DLL)模块,它包括在容器(包括COM程序接口的应用程序)当中。这种可重复使用的组件技术可以加快开发速度和质量,Windows 95 /NT应用程序开发程序如Powerbuilder和Access都利用了ActiveX控件。

        ActiveX控件可以由其他程序使用,也可以由HTML页面使用。

二、ActiveX开发过程
这里说明一下,我使用的编译环境是VS2008所以和vc6.0可能有所出入。
1、创建一个MFC ActiveX工程

下面的步骤直接点完成,或者需要个性配置的话跟着向导一步步设置就好了。
2、ActiveX控件其实就是一个动态库,那就需要暴露接口给外面使用。添加接口方法如下:

打开工程的类视图,可以看到一个StaticMapGPSLib类,下面有两个接口:_DStaticMapGPS和_DStaticMapGPSEvents。
(1)如果需要定义给其他第三方程序调用的接口就需要在_DStaticMapGps接口类里面定义函数,它的实现机制其实和消息映射类似也是通过一个function id映射到具体的函数地址上;
(2)如果需要定义回调事件则需要在CStaticMapGPSCtrl类中定义事件函数。所谓回调事件,其实就是调用者注册好回调函数然后由控件主动调用函数。通过这种回调的方式完成由控件
 到调用者的主动通信。
手动添加这些函数非常麻烦,就像在MFC程序中添加一个消息处理函数一样(ActiveX里面比这还复杂),好在微软给我提供了添加向导来简化这一步骤(微软还是很注重用户体验的,这点确实做得很好),如图:
右击红色框框住的接口类,选择添加方法就会弹出一个添加方法向导出来。根据自己需要定义就OK了。


添加回调事件函数遵照同样的方法选添加事件就可以生成了,需要注意的是添加的回调事件函数是不需要自己去实现的,直接通过向导生成就可以不用管了。需要主动通信的时候在控件调用一下即可(其实就是回调函数的调用方法),
返回值由参数值返回。

三、测试OCX控件接口是否起作用。
测试接口是否起作用可以使用一段html代码实现,如下

<span style="font-size:14px;"><HTML>
<BODY>
<OBJECT ID="DS_GetBarCode" border=0 width=1200 height=948
CLASSID = "CLSID:381EEBA4-1C87-490C-A622-442F40A37710">
</object>

<form name="CheckPrinter">
<input type="button" value="获取当前页条码" onClick = "GetBarCode()">
</form>
<script language="javascript"> 
function GetBarCode()
{
 DS_GetBarCode.HidePoint();//HidePoint是控件的一个供外调用接口函数
}
</script>
</BODY>
</HTML></span>

 

这里可能会有一点以为,就是有一个控件的CLASSID该怎么填的问题,其实在生成的控件文件有一个后缀名是.idl的文件,CLASSID就记录在其中,打开这个文件会看到很多的ID但是控件的ID到底是哪个呢?
如图所示

有一段注释Class information for CStaticMapGPSCtrl,下面的uuid就是控件的CLASSID了。有了这个就可以加载控件了。

四、开发升级
可能在一些开发中,会需要开发带对话框的OCX控件。其实实现起来也是很简单的,仔细看生成的CStaticMapGPSCtrl类的定义可以发现它是集成了COleControl类,而COleControl又是集成了CWnd,好了看到这里
想必大家已经知道该怎样开发带对话框的控件了,没错其实就和开发MFC对话框程序一样,只要在资源中把对话框铺到控件原始的对话框中就OK了,开发的时候只要把和MFC开发过程一模一样,该创建创建,
该捕获消息捕获消息照着写就是了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值