前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OCX 入门

OCX 入门

作者头像
_gongluck
发布2018-04-04 11:41:40
3K0
发布2018-04-04 11:41:40
举报

OCX入门:https://cloud.tencent.com/developer/article/1084459

前言

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” 。

2.输入项目名称为“ActiveXDemo”和项目位置。

点击确定进行下一步。

3.运行时许可证默认不勾选。

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

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

其中 的 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,其他默认。

2.方法

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

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

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

3.事件 ACTIVEX通过事件通知容器控件上发生了某些事情。将控件开发人员的某一特定操作识别为事件。 如下图所示,我们添加事件,添加事件顺序按照如图所示。事件名我们写OnSend ,内部名称习惯上修改为FIleOnSend.添加一个参数lpstrTime.

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

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

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

2.注册 命令行输入regsvr32 控件路径XXX

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

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

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

入门二:http://blog.csdn.net/LG1259156776/article/details/52004566

最近开始学ActiveX控件编程,上手不太容易,上网想找相关教程也没合适的,最后还是在师哥的指导下完成了第一个简单控件的开发,现在把开发过程贴出来与大家分享一下~

(环境说明——平台:vs2005;语言:VC++;基于对话框)

①新建工程:

首先以管理员身份运行vs2005,文件->新建->项目,选择Visual C++下MFC,模板选MFC ActiveX控件,自定义工程名(我的为MyActiveX),确定后基本采用默认设置,直接”下一步”,不过”控件设置”中”创建的控件基于”改选为STATIC。

②介绍一下默认添加的三个基本类:

CMyActiveXApp:

提供了控件类的初始化(InitInstance)和销毁代码(ExitInstance)。

CMyActiveXCtrl:

用来实现控件建好后有什么功能。

CMyActiveXPropPage:

用来建立属性页,当控件建好后,可让用户通过“可视化”的属性页用鼠标来选择控件的属性。

③新建Dialog视图:

1)选中资源视图,右键单击Dialog,选择”插入Dialog”。(有些vs2005的资源视图在整个工程界面的右边侧)

2)默认生成一个包含两个按钮的对话框,对话框ID(默认为IDD_DIALOG1)可自行更改(不与其它的重复即可,我的改为IDD_MYDIALOG)

3)重新设计对话框,并增加一个”edit control”(文本框)控件。所有标准控件都在右侧的”工具箱”中(有的vs2005的工具箱在左侧),选中后再在对话框中相应位置单击一下即可,可直接拖动和缩放控件。这些控件的ID都可自行修改。

4)注意:关于对话框,一定要将其Visible属性改为True(也就是ID为IDD_MYDIALOG的这个最外层对话框对应的Visible属性,其默认为False),否则,即使其它一切都对,最后对话框的内容还是不显示!!

5)另外,对话框的Style属性改为Child(默认为Popup),这样运行的控件就会嵌在网页窗口内,而不是单独弹出一个对话框。当然,这里要根据你的实际需求选择。

6)将文本框控件(IDC_EDIT1)的Multiline属性设为True(默认为False),使的文本框内的内容可以分行显示。

④为Dialog创建对应的类:

1)右键单击对话框视图(不要点到某个具体控件),选择”添加类”

2)自定义类名,我的叫CMyDialog,注意其对话框ID与IDD_MYDIALOG对应,单击”完成”

3)vs2005会自动为你添加基本的代码

⑤为类添加成员变量

(一)为对话框类创建实例变量

1)在基本类CMyActiveXCtrl中为刚刚新建的对话框类创建实例变量:在类视图中右键单击CMyActiveXCtrl,选择添加->添加变量

2)变量类型改为CMyDialog(需手动输入,就是刚刚新建的对话框类的类名),变量名自定义,我的为m_MyDialog,注释就自己随意添加啦~

3)完成后就可发现MyActiveXCtrl.h中最后面成功添加上了对话框对象。

P.S.工程记得随时保存!

(二)为对话框中的控件创建实例变量

1)以”确定”按钮为例,在该按钮处单击右键,选择”添加变量”

2)自定义变量名,我的叫m_OKButton。

注意一下”控件变量”是否勾选,”控件ID”是否选为IDOK,若前面是在”确定”按钮控件上右键添加变量的话,这两项应该都默认是对的。

确认后点”完成”即可为该按钮在对话框CMyDialog类中添加相应的成员变量。

3)仿照上述几步,为”取消”按钮和文本编辑框也添加相应的成员变量,分别取名为m_CancelButton和m_Edit,对应控件ID为IDCANCEL和IDC_EDIT1。完成后MyDialog.h的最后面就会添加上这几个变量。

⑥在相应事件中添加代码以创建并绘制对话框和控件

1)为CMyActiveXCtrl类处理WM_CREATE事件,以初始化对话框对象:

左侧选中CMyActiveXCtrl,右侧属性栏选择”消息”那个小图标,找到WM_CREATE,点击下拉按钮,选择”<添加>OnCreate”。

2)在MyActiveXCtrl.cpp中现在会多出OnCreate函数(这不是我们自定义的函数,实际是重写的父类的函数),在其中添加一段代码:

m_MyDialog.Create(IDD_MYDIALOG,this);  //初始化对话框

3)在MyActiveXCtrl.cpp中的OnDraw函数中添加绘制对话框的代码:

m_MyDialog.MoveWindow(rcBounds,true);

并注释掉后面的”DoSuperclassPaint(pdc, rcBounds);”

⑦为确定按钮添加点击响应事件

1)选中”确定”按钮,在右侧的属性栏点击控件事件小图标(小闪电),点击BN_CLICKED,再点击右侧对应的下拉按钮选择添加OnBnClickedOk函数(在CMyDialog类中)。

2)在CMyDialog.cpp中为OnBnClickedOk函数添加相应代码:

         int   nLength=m_Edit.SendMessage(WM_GETTEXTLENGTH);    

         m_Edit.SetSel(nLength, nLength);    

         m_Edit.ReplaceSel(_T("Hello World!——企鹅Sheldon/r/n"));

使得每点击一次确定按钮,文本编辑框添加一行文本:“Hello World!——企鹅Sheldon”。

注释掉”OnOK();”,这样点击确定按钮就不会直接关闭对话框了。

⑧编译调试程序,生成.ocx文件

若以上步骤都成功完成,那么恭喜你,一个简单的ActiveX控件就已经初步编写完成啦!下面进行编译调试。

1)调试前,设置编译模式为Release,也就是将工具栏中执行小图标旁的Debug改选为Release。

2)在最上一行的工具栏中选择 调试->启动调试

3)成功后会在工程根目录的release文件夹下生成相应文件,其中的MyActiveX.ocx即为我们所需的控件文件,不过它不能直接独立运行,需要借助浏览器,并且需要先在系统注册。

注:调试过程中可能提示”无法找到”tstcon32.exe”的调试信息…要继续调试吗?”,选择是即可。

⑨注册控件MyActiveX.ocx

1)用管理员身份运行”Windows命令处理程序”(命令提示符),转到MyActiveX.ocx文件所在目录下,为求简便,我将其移到了C盘的MyActiveX文件夹下。

相关命令:

1.cd /MyActiveX :转到C盘下的MyActiveX文件夹下。

2.dir :查看当前目录下文件信息

3.regsvr32 xxx.ocx :装载控件

4.regsvr32 -u xxx.ocx :卸载控件

5.regedit :注册表编辑器(在第一个文件夹下的CLSID目录下,有注册号信息)

注:ocx控件使用前一定要先卸载旧的。

这里是第一次注册该控件,转到相应目录下后直接输入regsvr32 MyActiveX.ocx即可。成功后会有提示框,直接点确定。

⑩注册成功后插入相应网页中

编写测试网页,我推荐使用微软的ActiveX Control Pad,不用自己写代码。

1)运行Microsoft ActiveX Control Pad软件,在代码<BODY>下方空白处单击右键,选择”Insert ActiveX Control”

2)选中我们新注册的MyActiveX Control控件,单击OK

3)这时会弹出两个框,一个是我们的控件视图,一个是属性。为控件视图调整适当的窗体大小,然后关闭。

4)软件会自动帮你在<BODY>和</BODY>之间添加上相应代码,点击工具栏上的保存按钮,将网页保存到所需位置。我就直接保存到桌面上。

5)到此,测试网页也编辑完成,用IE打开测试网页,允许阻止的内容,看看,控件是不是成功显示啦~

好了,一个简单的ActiveX控件就已全部完成,这是一个最基本的例子,希望对初学ActiveX控件的同学有所帮助!

P.S.随便说说Debug和Release的区别吧:

    两者都是用于编译,不过两者所依赖的库不同,用处也有区别,具体说来:

    Debug我们一般叫调试,编译的结果会包含调试信息,它会有相应的宏,而且不做任何优化,所以编译出来的.ocx或.exe文件会大一点。一般开发者在开发过程中会使用Debug调试。

    Release则通常称为发布版本,它不保存调试信息,而且会进行优化,所以编译出来的.ocx或.exe文件会小一点,以期达到代码最小和速度最优。一般是最终完成后发布的版本,为用户使用,一般客户不允许在发布版本上进行调试。

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

注册反注册OCX:http://blog.csdn.net/piaopiaopiaopiaopiao/article/details/41649495

一:用MFC生成的ActiveX控件,需要注册之后才能使用。

注意:注册与反注册都需要管理员权限,才能操作成功。

注册命令:regsvr32 "E:\Clock.ocx"

反注册命令:regsvr32 /u "E:\Clock.ocx"

在此介绍两个实用工具:

工具一:RegDllView

功能:查看电脑中已注册的组件(dll,exe,ocx),方便的反注册(卸载)组件,删除已注册但文件被删除的假组件。

下载地址:http://www.xiazaiba.com/html/2059.html

工具二:注册表清理工具

功能:清除一些已注册但ocx被删除的组件,即清理垃圾注册项。

下载地址:http://mydown.yesky.com/soft/utilitie/register/282/438782.shtml

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

调试OCX:http://blog.csdn.net/cbnotes/article/details/8281558

1. TSTCON32.exe的编译:

在编写Activex控件时,可以用到Active X control test container来测试Activex控件,这在Visual Studio 6.0里面是很方便查找的,工具菜单下面就有。但是在Visaul studio 2008 里面TSTCON32.exe这个文件却消失了。是微软疏忽忘了吗?不是的,而是微软把它放在了例子程序里面(提供源码),需要自己编译。详细目录:比如我装在C盘里面,VC的例子在

“C:\Program Files\MicrosoftVisual Studio 9.0\Samples\2052\AllVCLanguageSamples.zip”,把这个文件解压缩以后,在下面的目录可以找到TSTCON32.exe的源代码:“C++\MFC\ole\TstCon”,自己编译就可以了。 

如果没有相关示例,请到这里下载:

http://msdn.microsoft.com/zh-cn/library/f9adb5t5(v=vs.90).aspx(http://msdn.microsoft.com/zh-cn/library/f9adb5t5(v=vs.90%29.aspx)

打开TstCon工程后,会发现其中包括两个工程:TCProps和TstCon。

图一:TSTCON解决方案共有两个项目

注意得先编译TCProps(即将TCProps设置为“设为启动项目”),然后再编译TstCon!!!

2.注意事项:

1.由于默认的是Itanium解决方案平台,所以在编译TCProps和TstCon要先将编译平台选为Win32

2.如果是在Vista或者windows7操作系统下面。你在编译的时候,需要将两个项目属性中的设置为:“启用用户账户控制”设置为“否”。这样编译后的结果才可以正常在windows7或者vista上面运行,否则在运行时将出现系统配置错误的提示。具体设置如下图所示:

图二:TCProps项目的设置

图三:TstCon项目的设置

提供编译好的TstCon32.exe以供下载(debug版)

http://download.csdn.net/detail/cbnotes/4871829

3.设置在工具菜单中可见:

将上面的生成的TstCon32.exe显示在VS2008 IDE的工具菜单中,以便调用。

具体步骤为:点击:工具->外部工具,将弹出如下对话框:

图四:外部工具

点击“添加”按钮,填写底部的相关信息,设置如下图所示:

图五:相关设置信息

如上图所示,

标题(2):设置为工具的名称,可以根据自己的喜欢设置名字。

命令(3):设置工具的完整路径。

其它的设置可以不填,然后点击“应用”按钮。

在工具菜单中,将出现“ActiveX控件测试容器”的菜单项,点击该项,将弹出ActiveX控件测试容器程序(即TstCon32.exe),如下图所示:

图六:ActiveX控件测试容器

要测试某个ActiveX控件,点击“Edit->Inser New Control…”,将弹出控件选择框,选择要测试的控件即可(控件必须要先注册)。

转载请说明出处,谢谢。http://my.csdn.net/cbnotes

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年03月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. TSTCON32.exe的编译:
  • 2.注意事项:
  • 3.设置在工具菜单中可见:
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档