VC++编写ActiveX控件



前言:ocx是ocx控件的扩展名,OCX 是对象类别扩充组件。如果你用过Visual Basic或者Delphi一类的可视化编程工具,那么对控件这个概念一定不会陌生,就是那些工具条上的小按钮,如EditBox,Grid,ImageBox,Timer等等。每个控件都有自己的事件、方法和属性。使用了控件的编程非常容易。首先,在程序的设计阶段可以设置一些属性,如大小,位置,标题(caption)等等;在程序运行阶段,可以更改这些属性,还可以针对不同的事件,调用不同的方法来实现对该控件的控制。控件就好像一块块的积木,程序要做的事只是将这些积木搭起来。控件的最大好处是可以重复使用,甚至可以在不同的编程语言之间使用,例如你可以在VB中嵌入用VC开发的控件。

       那么下面开始详细介绍如何生成你想要的“*.ocx”文件:

1、从最简单的开始入手


       1.1  如何建立Ocx工程

       新建项目->MFC ActiveX WinZard

 

       在这里解决方案的名字我取名为SIP_OCX_DEMO,点击“确定”,在出现的窗口中直接点击“完成”。VC++会自动生成一些文件,这些文件就构成了ActiveX的基本模板,文件的主要结构如下:

       注意上面红框标注的文件是非常重要的部分,直接编译会在Debug目录下生成一个名为“SIP_OCX_DEMO.ocx”的控件注册文件,然后利用“regsvr32”命令就可以实现本机对此控件的注册,就可以使用本语言或者跨语言编写程序时引用此控件来实现相应的功能(当然现在没有任何功能)。

       1.2  如何调试

       VC++6.0自带有一个调试控件的工具“ActiveX控件测试容器”,通过三种方式可以打开:

1.点击“调试”按钮,然后浏览"C:\Program Files\Microsoft Visual Studio\Common\Tools\TSTCON32.EXE“;

2. 系统的“开始“-》“程序”-》“Microsoft Visual C++ 6.0”-》“Microsoft Visual C++ 6.0 Tools”-》“Active Control Test Container”;

3. VC++开发环境中的“工具”-》“ActiveX Control Test Container”。

       但是如果编译环境是VS2005呢?VC6.0时代的第一种调试方法还是可行的,点击调试按钮,如下所示:

       在上面的可执行文件名称的下拉框中有ActiveX Control Test Container的选项,选择点确定即可。当然还有别的手段,后面会提到。用上面的方法调试出下面窗口:

 

       右击空白区域,插入控件,然后会弹出下面的对话框:

 

      选中指定控件,点击确定,控件就被加载到此工具中,然后可以通过这个工具来看此控件的相关事件响应等等。

2、自定义方法和事件

1.点击“视图”,打开“类视图”窗口;其中App类负责启动初始化与结束时清理工作;Ctrl类是我们主要使用的;PropPage是属性类。

注意红框所示内容(以-lib结尾的文件)即为供第三方使用的借口和事件通知的接口的所在位置。

2.展开“ActiveXDemoLib”项,选中“_DActiveXDemo”项。点击鼠标右键,选择“添加”下的“添加方法”。

 

3.打开添加方法向导窗口。因为是添加一个无形参无返回值的测试方法,所以设置的返回类型为void,方法名设为test。

 

4.其它为默认设置,点击“完成”按钮完成添加方法。接下来我们打开“解决方案资源管理器”打开“SIP_OCX_DEMOCtrl.cpp”文件。

 

5. 打开代码视图,我们会发现VC2005已经为我们添加了一个“test”方法;

同时在.idl文件中会发现:

这里就是供第三方集成的接口列表。

 

3、自定义功能实现

       首先为了实现这个功能,我需要一个主对话框,当IE加载这个ActiveX时会把这个对话框图显示出来。在资源视图中选择Dialog右键点击添加资源:

       然后会出现如下窗口:

      

       选择新建,在生成的属性窗口中将ID改为IDD_MAINDIALOG,同时把下面的几种属性设置一下:

Border :None

Style :Child

Visible :True

 

为了以后扩展的要求,加入了一个新的类“CMainDialog”类。操作:右键点一个这个对话框,然后选择“添加类“:

      

 

       为了能够在Ctrl类中使用这个对话框,在SIP_OCX_DEMOCtrl.h增加一个成员变量“m_MainDialog”。

 

       由于这个变量和对话框资源与关联,在创建控件时需要把这个对话框也创建出来。这个操作要用消息来驱动。单击SIP_OCX_DEMOCtrl,在其属性窗口中的消息窗口中有一个消息叫WM_CREATE,可以让VS2005创建一个函数OnCreate()。

 

       在这个函数体中,添加如下代码,来创建这个对话框。

[cpp] view plain copy print ?
  1. m_MainDialog.Create(IDD_MAINDIALOG, this);  
m_MainDialog.Create(IDD_MAINDIALOG, this);

 

       这里自定义的功能是SIP的一个简单呼叫,这里不作详细说明。

 4.控件的使用方法

       ocx控件的安装方式有很多种,这里介绍最简单的一种。

1、进入命令行;

2、进入Ocx生成目录;

3、regsvr32.exe .ocx文件;

4、创建html文件调用本地Ocx;

由于是本地注册,打开注册表,开始 菜单 -》 运行 -》regedit -》用控件的名称SIP_OCX_DEMO查找,可以找到

 

可以发现其classid 的值为BFE10FBC-C682-4423-8C6E-7A38219FA064,和SIP_OCX_DEMO.ocx 文件同一路径下编辑一个 test.html文件,内容如下:

[html] view plain copy print ?
  1. <OBJECT id="SIP_OCX_DEMO" name="SIP_OCX_DEMO.ocx"  
  2.       classid="clsid:BFE10FBC-C682-4423-8C6E-7A38219FA064"  
  3.       width="100%" height="250">  
 
  

 

5、保存后用IE 浏览器打开选择允许使用ActiveX 控件即可看到控件的面板;

你可能感兴趣的:(C/C++)