1. 首页
  2. 开发
  3. C/C++

MFC ActiveX (ocx)控件的开发

前言
ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。

ActiveX控件是一种实现了一系列特定接口而使其在使用和外观上更象一个控件的COM组件。ActiveX控件这种技术涉及到了几乎所有的COM和OLE的技术精华,如可链接对象、统一数据传输、OLE文档、属性页、永久存储以及OLE自动化等。

ActiveX控件作为基本的界面单元,必须拥有自己的属性和方法以适合不同特点的程序和向包容器程序提供功能服务,其属性和方法均由自动化服务的 IDispatch接口来支持。除了属性和方法外,ActiveX控件还具有区别于自动化服务的一种特性–事件。事件指的是从控件发送给其包容程序的一 种通知。与窗口控件通过发送消息通知其拥有者类似,ActiveX控件是通过触发事件来通知其包容器的。事件的触发通常是通过控件包容器提供的IDispatch接口来调用自动化对象的方法来实现的。在设计ActiveX控件时就应当考虑控件可能会发生哪些事件以及包容器程序将会对其中的哪些事件感兴趣并将这些事件包含进来。与自动化服务不同,ActiveX控件的方法、属性和事件均有自定义(custom)和库存(stock)两种不同的类 型。自定义的方法和属性也就是是普通的自动化方法和属性,自定义事件则是自己选取名字和Dispatch ID的事件。而所谓的库存方法、属性和事件则是使用了ActiveX控件规定了名字和Dispatch ID的”标准”方法、属性和事件。
ActiveX控件可以使COM组件从外观和使用上能与普通的窗口控件一样,而且还提供了类似于设置Windows标准控件属性的属性页,使其能够在包容器程序的设计阶段对ActiveX控件的属性进行可视化设置。ActiveX控件提供的这些功能使得对其的使用将是非常方便的。本文下面即以MFC为工 具对ActiveX控件的开发进行介绍。
一、创建项目

1.打开VS2008新建MFC项目。这里我们取名为“ActiveXDemo” 。

20161024092839372

2.输入项目名称为“ActiveXDemo”和项目位置。
点击确定进行下一步。

20161024094226384

3.运行时许可证默认不勾选。
如果勾上,生成时会多出一个文件.lic , 只有拥有许可的用户才可以调用ocx插件。继续下一步。

20161024094407534

20161024094433588

4.完成创建控件项目自动创建好MFC ActiveX程序框架。

20161024094633949

20161024094703621

其中 的 ACtiveXDemoApp 是 我 们 这 个 控 件 的 主 程 序 模 块 , 定 义 了 控 件的 注 册
( DllRegisterServer)、删除(DllUnregisterServer)等功能,一般不用动,如有需要我们可以
在其中的 InitInstance 和ExitInstance 中定义我们自己的初始化和终止操作代码,一般也就是一些资源的初始化和销毁工作。
CActiveXDemoCtrl 是控件类,我们要做的控件功能基本上就是要在这个类中实现。
需要提一下的是在这个类中重写了父类的 OnDraw 函数,有如下两句代码:
pdc->FillRect(rcBounds,
CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
pdc->Ellipse(rcBounds);
也就是在控件上画了一个椭圆, 实际控件开发中可以根据功能需要修改重写这个函数来
绘制控件界面。
CActiveXDemoCtrlPropPage 是属性页类,这个类实现了一个在开发时设定控件属性的对话
框。
ActiveXDemoLib 是为客户程序提供本控件的属性、方法以及可能响应的事件的接口的。
二、添加属性,方法和事件

1.属性

 

属性是ACTIVEX控件想所有容器公开的数据成员。

如下图右键添加属性,属性变量类型我们选LONG,变量名为TimeStyle,其他默认。

20161024094839560

20161024094857341

2.方法

方法就是控件开放给用户使用的一些功能函数,类似于C++的类函数。开发人员可以提供自定义功能。

如下图所示我们添加一个方法Start(),其他默认。

20161024095114779

20161024095138046

如下图所示,我们可以从类视图清楚的看到我们添加的属性和方法名。

20161024095242125
3.事件
ACTIVEX通过事件通知容器控件上发生了某些事情。将控件开发人员的某一特定操作识别为事件。

如下图所示,我们添加事件,添加事件顺序按照如图所示。事件名我们写OnSend ,内部名称习惯上修改为FIleOnSend.添加一个参数lpstrTime.

20161024095552785

20161024095526391-1

如下图,我们可以清楚地看到我们刚才添加的事件

20161024095701189

20161024095727298
在start 事件中我们调用showcurrenttime 函数,函数实现已经给出。接着我们回调事件函数。

20161024095909596

20161024095927883

三、注册与反注册
1.唯一标识ID
如下图Classid 是该控件的唯一标识,这个我们可以在注册表里找到。

20161024100140315

20161024100200065

20161024100219653

2.注册

命令行输入regsvr32 控件路径XXX

20161024100322061

3.反注册
反注册控件regsvr32 -u 控件路径XXX

20161024100424812
到此我们 OCX 控件制作就完成了。

 

原创文章,作者:admin,如若转载,请注明出处:https://www.huiyingwu.com/4883/

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注