tp钱包官网网址|ocx
ocx_百度百科
百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心收藏查看我的收藏0有用+10ocx播报讨论上传视频对象类别扩充组件OCX 是对象类别扩充组件(Object Linking and Embedding (OLE) Control Extension);是可执行的文件的一种,但不可直接被执行; 是 ocx 控件的扩展名,与 .exe、.dll 同属于PE文件。如果你用过 Visual Basic 或者 Delphi 一类的可视化编程工具,那么对控件这个概念一定不会陌生,就是那些工具条上的小按钮,如 EditBox,Grid,ImageBox,Timer 等等。每个控件都有自己的事件、方法和属性。使用了控件的编程非常容易。在程序的设计阶段可以设置一些属性,如大小,位置,标题(caption)等等,在程序运行阶段,可以更改这些属性,还可以针对不同的事件,调用不同的方法来实现对该控件的控制。控件就好像一块块的积木,程序要做的事只是将这些积木搭起来。控件的最大好处是可以重复使用,甚至可以在不同的编程语言之间使用,例如,你可以在 VB 中嵌入用 VC 开发的控件。外文名Object Linking and Embedding (OLE) Control eXtension别 名Object Linking and Embedding Control eXtension平 台ocx 控件缩 写ocx目录1详细信息2注册方式3可能问题详细信息播报编辑控件的本质是微软公司的对象链接和嵌入(OLE)标准。由于它充分利用了面向对象的优点,使得程序效率得到了很大的提高,从而得到了广泛的应用。国外有很多公司就是专门制作各种各样控件的。控件的最早形式是以.VBX的格式出现的,后来变成了.OCX。由于Internet的广泛流行,微软公司推出了ActiveX技术,就是从OLE发展起来的,加入了WWW上的功能。所以最流行的是ActiveX控件。ActiveX控件.ActiveX控件是可重用的软件组件。使用它可以很快地在网络应用程序、桌面应用程序、以及开发工具中加入特殊的功能。ActiveX控件的使用者可以无需知道这些组件是如何开发的,便可以完成网页或应用程序的设计。对象链接和嵌入用户控件(OCX)是一种可以由在微软的Windows系统中运行的应用软件创建使用的特殊用途的程序。OCX提供操作滚动条移动和视窗恢复尺寸的功能。如果你有Windows系统,你会发现在你的Windows地址录里有大量OCX文件名后缀的文件。 对象链接和嵌入(OLE)被设计来支持混合文档(包含多种资料类型,比如文本、绘画图像、声音、动画)。Windows桌面就是一个混合文档的范例,微软使用OLE来建立的。OLE和组件对象模型(COM继OLE后的更常用的概念)支持“即插即用”程序的发展,“即插即用”程序在系统中可以用任何语言写入并可以由任何应用程序动态地使用。这些程序被认为是他们在其上运行的container的组件和应用程序。这种基于组件的近似应用程序的发展缩减了程序调试时间并改善了程序的性能和品质。Windows应用发展程序(比如powerbuilder和Microsoft Access)具有OCX的优势。注册方式播报编辑ocx控件的安装方式有很多种,这里介绍最简单的一种。步骤:1.进入开始,点击运行。2.在出现的框中键入regsvr32 C:\xxxx.ocx 。(XXXX为控件名, C:\为目录)(regsvr32E:\控件的制作\myOcxTest\Debug\myOcxTest.ocx)3.点击确认后等待出现提醒注册成功即可。oca 文件Oca文件不是控件,其中保存Ocx控件的属性ocx的注销1.进入开始,点击运行。2.在出现的框中键入regsvr32 /u C:\xxxx.ocx 。(XXXX为控件名, C:\为目录)(regsvr32 /u E:\控件的制作\myOcxTest\Debug\myOcxTest.ocx)3.点击确认后等待出现提醒注销成功即可。可能问题播报编辑同一个OCX的多个控件在同一窗体上会出现可能的问题,主要原因是不能有全局变量(或共享数据) ,应该尽量定义成类的成员变量,全局变量在同一个进程中要被共享的。新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000ocx入门浅析-CSDN博客
>ocx入门浅析-CSDN博客
ocx入门浅析
最新推荐文章于 2023-12-07 15:02:34 发布
kevin--你不知道的事
最新推荐文章于 2023-12-07 15:02:34 发布
阅读量4.1w
收藏
71
点赞数
12
文章标签:
ocx
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wangkui1331/article/details/53763990
版权
1.exe,ocx,dll的区别
分析:exe是一个可执行程序,而ocx看做是一个窗口上的控件(控件即ocx,如button),dll是将函数、变量、类封装在一起的库
ocx的形式如下:
图中的各个都是ocx控件(我是这样认为的),只不过MFC内置了一些控件,但是如果是自己写的ocx控件,程序运行时必须将生成的ocx控件拷到可执行目录下
2.ocx特点(根据普通的button可知)
(1)ocx是可视化窗口,一个ocx有一个ID,可以通过ID来建立一个对应的类,调用其中函数(如果看不到,那么肯定隐藏了)
(2)可以响应单击、双击等鼠标事件
(3)含有对应的属性
3.创建一个ocx程序(如何让ocx含有上面这些属性呢)
(1)利用VS2010创建一个MFC ActiveX Control工程,名为myocx
其中myocx.h中InitInstance是入口,.cpp中含有ocx注册、反注册的函数
myocxCtrl.h中CmyocxCtrl是ocx的可视化窗口类,父类是COleControl,因为是窗口,所以可以响应OnCreate,Onsize等消息,含有消息映射,调度映射,事件映射
myocxPropPage.h是ocx的属性,就像按钮button类含有属性一样
myocx.idl是对外接口,据说CmyocxCtrl类是继承它的,所有对外接口都在myocx.idl这里声明,在CmyocxCtrl类中实现
myocx.def,ocx是一种特殊的dll,所以同样有def文件,内容如下
; myocx.def : Declares the module parameters.
EXPORTS
DllCanUnloadNow PRIVATE
DllGetClassObject PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE其中的PRIVATE的意思是对ocx私有,即这些函数名不会加到生成的库文件中(编译ocx发现除了生成ocx,还有一个lib文件)
(2)消息映射,调度映射,事件映射
>1含义
消息映射:即响应操作系统的消息
调度映射:可以在外部调用的接口函数,通俗的将就是一个控件可以调用它内部的函数,如CButton btn;btn.函数名();
事件映射:单击、双击等事件由ocx传给它的容器进行响应,如按钮的一些事件,触发后可以在它的父窗口中进行响应处理
>2添加调度映射
在myocx的idl中对应的调度映射下添加:
[id(1)] void Hello();
在myocx.h中添加:
afx_msg void Hello();
//添加调度枚举类型
enum {
//调度ID,从1开始
dispidHello = 1L,
//事件ID,从1开始
};
在myocx.cpp中添加:
void CmyocxCtrl::Hello()
{
AfxMessageBox(_T("Hello world"));
}
编译并生成ocx,默认编译生成的ocx也注册好了
创建一个基于对话框的MFC工程,名为useocx,在对话框窗口右击插入ActiveX 控件,快速输入生成的ocx的前几个字母找到ocx,添加进去
右键ocx,选择添加变量,变量名设为m_myocx,设置好后,便会生成对应的ocx类
可以看到ocx类中已经自动含有:
void Hello()
{
InvokeHelper(0x1, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
这个时候就可以利用m_myocx调用里面的Hello函数了
附:也可以在下面这个位置右键选择添加添加函数实现
>3添加事件映射
在下图上右键
选择添加事件,选择Click,确认,效果是在idl文件事件下面多出下面一行:
[id(DISPID_CLICK)] void Click(void);
在myocx.cpp中中间多出:
BEGIN_EVENT_MAP(CmyocxCtrl, COleControl)
EVENT_STOCK_CLICK()
END_EVENT_MAP()
效果是在useocx工程的资源对话框文件中,右键添加的Ocx控件,查看属性,发现事件中
多出了Click属性,此时可以添加函数,运行useocx工程时鼠标点击控件就会触发这个函数
如果添加自定义的事件映射,则在myocxi.idl中事件映射下添加:
[id(1)] void MyDrag(void);
在myocxCtrl.h中添加
enum {
//调度映射ID
dispidHelloClick = 1L,
//事件映射ID
eventidMyDrag = 1L,
};
protected:
void MyDrag(void)
{
FireEvent(eventidMyDrag, EVENT_PARAM(VTS_NONE));
}
同样查看useocx工程资源对话框文件控件属性:
多出MyDrag属性,此时可以再外面写响应函数,具体触发则需要根据需要在ocx内部调用就可以触发
这里注意ocx事件触发都是在ocx内部触发,外部进行响应处理的,如button类,点击或双击都是在按钮本身触发,最后由它的父窗口进行响应处理,自定义的事件也是要在内部进行触发
注意:InvokeHelper和FireEvent这两个函数中的表示传入形参的参数含有多个时,通过空格进行隔开(一个函数形参可以有很多个,但返回值只有一个)
总结:
1.ocx有三种映射,但idl中对外提供的只有调度映射和事件映射
2.(1)ocx的类与ocx是通过idl文件中最后的类的ID建立联系的
idl中:
// Class information for CmyocxCtrl
[
uuid(EF2CFD6B-E121-47E3-BD63-5F5DD51DCCFF)
]
在ocx类(class CMyocxctrl_use : public CWnd)中
CLSID const& GetClsid()
{
static CLSID const clsid
= { 0xEF2CFD6B, 0xE121, 0x47E3, { 0xBD, 0x63, 0x5F, 0x5D, 0xD5, 0x1D, 0xCC, 0xFF } };
return clsid;
}
(2)调度映射是通过Idl中调度函数前的ID建立联系的
在idl中:
[id(1)] void Hello();
在在ocx类(class CMyocxctrl_use : public CWnd)中
void Hello()
{
InvokeHelper(0x1, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
}
(3)事件映射是在内部进行触发,也就是含有fireEvent的那个函数是在ocx内部调用作为触发方式,响应在外面实现
3.ocx作为控件在MFC中使用时,此时该控件与它的容器是父窗口与子窗口关系,普通控件与父窗口之间的函数调用方式它也同样适用
4ocx属性
与myocxPropPage.h中CmyocxPropPage类有关,对应的效果:
5.ocx调试
(1)在exe中进行调试
按照上面方法在useocx工程中添加好ocx后,在myocx工程中设置以下属性:
就可以调试了
(2)在IE中调试
首先编写一个html文件,后缀名为htm,添加如下内容:
HTML>