ActiveX控件是什么?有什么作用?

ActiveX控件是什么?有什么作用?,第1张

ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。在有目录和其它支持的网络中,COM变成了分布式COM(DCOM)。在创建包括ActiveX程序时,主要的工作就是组件,一个可以自足的在ActiveX网络(现在的网络主要包括Windows和Mac)中任意运行的程序。这个组件就是ActiveX近控件。ActiveX是Microsoft为抗衡Sun Microsystems的JAVA技术而提出的,此控件的功能和JAVA applet功能类似。
如果您使用的是Windows *** 作系统,您或许会注意到一些以OCX结尾的文件。OCX代表“对象链接与嵌入控件”(OLE),这个技术是Microsoft提出的程序技术,用于处理桌面文件的混合使用。现在COM的概念已经取代OLE的一部分,Microsoft也使用ActiveX控件代表组件对象。
组件的一大优点就是可以被大多数应用程序再使用(这些应用程序称为组件容器)。一个COM组件(ActiveX控件)可由不同语言的开发工具开发,包括C++和Visual Basic或PowerBuilder,甚至一些技术性语言如VBScript。
目前,ActiveX控件在Windows 95/NT和Macintosh中运行,Microsoft还准备支持UNIX的ActiveX控件。
ActiveX组件包括如下几类:
1自动化服务器:可以由其他应用程序编程驱动的组件。自动化服务器至少包括一
个,也许是多个供其他应用程序生成和连接的基于IDispatch的接口。自动化服务器
可以含有也可以没有用户界面(UI),这取决于服务器的特性和功能。
2自动化控制器:那些使用和 *** 纵自动化服务器的应用程序。
3控件:ActiveX控件等价于以前的OLE控件或OCX。一个典型的控件包括设计时和运
行时的用户界面,唯一的IDispatch接口定义控件的方法和属性,唯一的
IConnectionPoint接口用于控件可引发的事件。
4文档:ActiveX文档,即以前所说的DocObect,表示一种不仅仅是简单控件或自动
化服务器的对象。ActiveX文档在结构上是对OLE链接和模型的扩展,并对其所在的
容器具有更多控制权。一个最显著的变化是菜单的显示方式。一个典型的OLE文档的
菜单会与容器菜单合并成一个新的集合,而ActiveX文档将替换整个菜单系统,只表
现出文档的特性而不是文档与容器共同的特性。
5容器:ActiveX容器是一个可以作为自动化服务器、控件和文档宿主的应用程序

ActiveX是Microsoft提出的一组使用COM(ComponentObjectModel,部件对象模型)使得软件部件在网络环境中进行交互的技术集。它与具体的编程语言无关。作为针对Internet应用开发的技术,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。本文着重介绍以Visual C++ 50为工具,利用系统提供的AppWizard快速构造一个简单的ActiveX控件。
通常VC++50提供两个途径开发ActiveX控制:MFC和ATL(ActiveXTemplateLibrary)。使用MFC,可以不必理会控制接口的细节,把注意力集中在控制本身的功能上,但是生成的控制比较大。而且,客户端如果要运行此ActiveX控制,必须拥有相应版本的MFC类库的DLL,否则,必须同时下载这些巨大的类库;使用ATL,由于不汲及MFC的标准类库,生成的控制相对较小,但开发者必须了解COM、OLE技术的细节。这里,我们主要说明一下使用MFC开发ActiveX控制的方法,因为这种方法相对比较容易。
在Microsoft Developer Studio环境下,按如下的 *** 作步骤可以快速生成一个标准的ActiveX控件。首先,启动系统的AppWizard,用File菜单下的New菜单项创建新的项目。注意:我们选择的是列表框中的MFC ActiveX ControlWizard项。也可以使用ATL COM AppWizard项来产生ActiveX控件,这样实现的控件的最终代码量较小,但由于用这种方法加入的ActiveX控件对象从最基本的COM对象出发,故不能使用MFC类库中的COleControl所提供的强大功能。而用MFC ActiveX ControlWizard项则产生以COleControl为基类的控件对象类,它继承了所有COleControl类中实现的OLE控件的特性,包括窗口对象特性和方法、属性及事件等。接着,按照系统给出的提示信息逐步完成创建工作。用户可根据实际应用的要求定制控件的各项特性。
我们假定项目名为Test。创建工作完成后,打开Workspace文件Testdsw,可以看到系统生成的Test控件框架,主要的类及实现功能描述见下表:
派生类 基类 实现功能
CTestApp COleControlModule 控件实例的初始化和撤消
CTestCtrl COleControl 控件窗口的创建、更新及消息处理
CTestPropPage COlePropertyPage 控件属性页的设置及与实际属性值的交换
编译此项目,生成Testocx。在当前的Developer Studio环境下,这个控件已经被自动注册了。用系统提供的工具ActiveX Control Test Container可以立即进行测试,在已提供的可插入OLE控件列表中,Test Control就是我们生成的控件名。如果想在其它环境下使用它,则必须先对Testocx文件进行注册,具体做法是在命令行方式下键入命令:“regsvr32 …/Testocx”。此后,我们就可在任何支持ActiveX控件的环境中使用它了。注意:ocx文件应该随时更新和注册。
当然,这样生成的控件没有什么实质性的用处,若在任何一个包容器中测试它,则只可见一个矩形框和一个内切椭圆,除了缩放和位置移动功能外不能进行任何 *** 作。
然而,我们希望开发出来的控件就像一个通常的编辑环境一样:用户可以在窗口内进行文本的输入和编辑,而且有工具条来支持各项 *** 作。
1、为控件添加工具条和子窗口
VC++的模板常常是很有用的工具,我们设计一个类CToolbar,为控件类T添加工具条,显示每个按钮及提示信息。我们的控件类CtestCtrl是从这个类派生出来的,从而可为控件加上设计好了的工具条。
以下是实现工具条模板类的定义 (在Toolbarh文件中) :
template
class CToolbar
{
public:
CToolbar();
void CreateToolbar(HWND hParent);// 创建工具条
void AddButtons();// 逐个加入按钮
void DestroyToolbar();// 撤消工具条
LRESULT OnToolbarNeedText(WPARAM, LPNMHDR pnmh, BOOL&);
// 工具条上按钮的提示信息
protected:
HWND m_hwndToolbar;// 工具条的窗口句柄
};
接着,要对TestCtlh和TestCtlcpp作相应的修改。在TestCtlh中要先包含Toolbarh文件,并将控件类定义为:
class CTestCtrl : public COleControl, public CToolbar
然后,再加进消息映射宏:
BEGIN_TOOLBAR_MAP(CTestCtrl)
TOOLBAR_BUTTON(ID_New)
TOOLBAR_SEPARATOR()
TOOLBAR_BUTTON(ID_CUT)

TOOLBAR_SEPARATOR()

END_TOOLBAR_MAP()
以响应定制的工具条上的各个按钮消息。上面的宏在Toolbarh文件中被定义。于是,在CTestCtrl类的成员函数中就可以灵活使用CToolbar类的各项 *** 作了。
另外,我们再为控件设计一个可编辑的子窗口。这实现起来很方便,在控件类定义中直接加入CEdit类的对象作为成员变量m_TestEdit即可。
要想真正生成我们自己的控件窗口,则需重载COleControl::CreateControlWindow函数。控件窗口被创建时,该函数被调用,函数中先调用基类同名函数,再依次调用CreateToolbar和CreateTestEdit 生成控件中的工具条和子窗口。自然,我们不再需要系统缺省调用的画图函数,将CTestCtrl::OnDraw 中画矩形框和椭圆的部分去掉。CreateToolbar在工具条模板类中实现;CreateTestEdit 在控件类中自定义,函数先计算控件窗口的客户区和工具条的窗口大小,得到子窗口的位置,使之填满控件中工具条以外的全部区域,然后调用m_TestEditCreate函数,设置参数使子窗口具有用户所希望的各项风格。
2、调整控件窗口中各个对象的位置
工具条和子窗口已经在控件中生成后,还有一项重要的工作就是当控件位置移动或大小改变时,要相应地调整工具条和子窗口的位置和大校
COleControl类为我们提供了这样的函数:
COleControl::OnSetObjectRects(LPCRECT lpRectPos, LPCRECT lpRectClip);
其中的参数给出了控件的新位置。重载此函数,先按系统提供的功能自动调整工具条,调用:
::SendMessage(m_hwndToolbar, TB_AUTOSIZE, 0L, 0L)
然后,同创建时一样计算控件窗口的客户区(参数lpRectPos已给出),调用GetWindowRect获得工具条的窗口大校为使子窗口填满控件中工具条以外的全部区域,应先计算出相应的矩形位置并调用m_TestEditSetWindowPos来 实现子窗口的位置调整。为了美观起见,也可在子窗口的四边留出少许富余。最后,调用基类的OnSetObjectRects函数。
3、实现对控件内对象的控制
因为有了子窗口,实际上用户的各项功能 *** 作都是由子窗口来控制完成的。我们将焦点的控制权交给子窗口,使用户能进行输入和编辑 *** 作,在CTestCtrl::OnSetFocus中调用m_TestEditSetFocus。同样,当控件对象捕获到工具条上的按钮被按下的消息时,要调用 m_TestEdit 的相应函数以执行用户的命令。
工具条上提示信息的显示也由控件对象来控制。在CTestCtrl::OnNotify函数中加入如下代码:
NMHDR pNMHDR = (NMHDR )lParam;
BOOL tmp;
if (pNMHDR->code == TTN_NEEDTEXT)
return OnToolbarNeedText(wParam, pNMHDR, tmp);
这样,当鼠标移动并停留在工具条的某个按钮上时,控件对象就会调用工具条模板类中的OnToolbarNeedText 函数以获得相应的提示信息。
4、控件窗口及内部对象的撤消
最后需要说明的是,如果我们在控件中创建了新的工具条和子窗口,则也应该及时撤消控件窗口及其内部对象。撤消控件窗口,即是在 CTestEdit::OnDestroy函数中依次调用DestroyToolbar和 m_TestEditDestroyWindow 来清除工具条和子窗口。
遵循以上四个工作步骤就可以很好地创建一个带有工具条和编辑子窗口的ActiveX控件。子窗口可由用户自己定义,象通常的应用程序那样去实现各种各样或简单或复杂的功能。工具条的存在使用户执行各项 *** 作更加方便。此外,在控件中加进其它各种所需的对象并进行控制也是可能的。

新项目中需要在mfc框架中播放swf,因此决定使用flash控件:
第一步:在本机安装flash10
Flash activex控件一般安装在用户系统目录下:C:\WINDOWS\system32\Macromed\Flash\
其中大版本号用数字表示,如9,10,11等,小版本号用小写字母表示,如a, b, c, d, e。如最新稳定版本为:Flash10eocx。
第二步:通过regsvr32exe注册flash控件 Flash10eocx
在命令行中输入:regsvr32 C:\WINDOWS\system32\Macromed\Flash\Flash10eocx 注册该控件(注册之后就可以在项目中进行控件添加了)
注销控件的命令行为 regsvr32 /u C:\WINDOWS\system32\Macromed\Flash\Flash10eocx
第三步:注册完毕后,进入MFC项目,增加flash控件:
就是shockwave flash object控件。“建立对话框应用程序后,在主菜单里选择“工程->添加工程->components and controls”菜单选项,这时会d出一个components and controls gallery文件选择对话框,里面有两个文件夹,一个是registered activex controls,一个是visual c++ components。选择第一文件夹后会出现一系列系统上已注册过的activex控件。在里面选择shockwave flash object,点击insert将它插入工程。因为在vc中插入工程的控件要通过一个类来 *** 作,所以这时vc会提示你为这个控件指定一个类名,可以使用默认的类名就行了。插入后vc会自动把这个类加入工程里面。”
第四步:生成一个该控件的对象。
将shockwave flash object控件成功插入自己的工程后,在vc对话框编辑器的controls面板上就会多出图标,这个图标就是刚加入的控件的图标了。呵,这样接下来怎么用就再清楚不过了吧。和使用BUTTON、EDIT等其它windows控件一样,把它拉到对话框上,给它关联一个对象,对象的类就是我们刚才插入控件的时候所产生的类。我们可以使用这个类的成员函数来 *** 纵这个对象,来进行flash动画的控制以及和自己的程序进行交互等 *** 作了。这里假设关联的对象名为:m_FlashPlayer。
第五步:使用成员函数LoadMovie和Play来导入并播放动画。
m_FlashPlayerLoadMovie(0, strMovieUrl);该函数用来将动画导入程序中,strMovieUrl为要播放的flash路径,要用绝对路径。 m_FlashPlayerPlay();调用该函数开始播放动画。在初始化对话框的函数里面加入这两个函数调用即可。

 VS2010中,可以使用ClassWizard添加ActiveX控件,而VS2005以后的版本没有。如果要添加ActiveX对应的类,可以“项目”→“添加类”→“ActiveX控件中的MFC类”,打开“从ActiveX控件添加类向导”对话框。
可以选择从注册表添加控件,需要先注册控件;也可选择从文件添加控件。
接口类型选择添加所有接口。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10616409.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存