MFC ActiveX 控件开发指南
- 格式:doc
- 大小:45.00 KB
- 文档页数:3
步步学ACTIVEX网页控件开发转载自IT168 [ / ]第1页:创建ActiveX控件本文将首先介绍如何使用Visual Studio开发一个简单的ActiveX控件,然后介绍ActiveX控件开发相关的基础知识,比如方法,属性和事件等,最后介绍如何利用这些知识,实现ActiveX控件和网页页面之间的通信。
MyActiveX控件的效果图简介ActiveX是由Microsoft在90年代中期提出的一项技术。
利用ActiveX技术,开发者可以创建像Java小程序applet一样的小型应用程序。
这些应用程序可以被下载然后在Microsoft的浏览器中运行。
这篇文章是为那些想学习如何开发他们的第一个ActiveX控件的Visual C++开发者准备的。
当我自己尝试学习这些技术的时候,我发现很多针对ActiveX技术的资料都已经不再适用了,都已经过时了,或者丢失了很多关键性的信息,这些都使得我在为我的项目创建一个ActiveX控件的时候,变得困难重重。
这篇文章将帮助你实现ActiveX网页控件开发的快速入门。
本文将首先介绍如何使用 Visual Studio开发一个简单的ActiveX控件,然后介绍ActiveX控件开发相关的基础知识,比如方法,属性和事件等,最后介绍如何利用这些知识,实现ActiveX控件和网页页面之间的通信。
另外,你也将学习到如何在默认的Internet Explorer安全设置下取消掉控件加载过程中的警告或者错误提示,使你的控件成为一个“安全”的ActiveX控件。
在本文中,我们将创建一个实际的ActiveX控件。
在控件加载的过程中,它将显示一个动态的进度条,告诉用户控件正在加载并处理信息。
同时,这个控件也将展示如何在ActiveX控件和Web页面之间传递信息。
本文将引导你一步步地利用Microsoft Visual Studio 2005完成ActiveX控件的开发工作。
创建ActiveX控件要创建一个ActiveX控件,首先启动Visual Studio 2005,执行下面这些步骤:1.选择“文件”菜单,然后选择“新建”->“项目”。
作者: 中国电波传播研究所青岛分所郎锐时间: 2004-03-09出处: yesky一、前言二、建立工程框架三、属性、方法以及事件的添加四、实现属性表五、在包容程序中使用ActiveX控件六、小结前言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自定义控件编写过程MFC(Microsoft Foundation Class)是微软公司在Windows操作系统上开发的一套C++应用程序框架。
它提供了一系列的类和函数,使得开发者可以更快、更方便地开发Windows应用程序。
在MFC中,我们可以根据需要自定义控件。
编写MFC自定义控件的过程主要包括以下几个步骤:1.定义控件类:首先,我们需要定义一个派生自CWnd或CButton等基类的控件类。
派生类通常以"C"作为前缀,例如CCustomControl。
在控件类中,我们可以添加自定义的属性和方法。
2.注册控件类:在应用程序初始化时,我们需要调用AfxRegisterClass函数来注册自定义的控件类,以便能够在程序中使用。
3.创建控件对象:在创建控件的对话框或窗口时,我们需要使用Create函数来创建自定义的控件对象。
在Create函数中,我们可以指定控件的位置、大小等属性。
4.响应消息:在控件类中,我们可以重写一些成员函数来响应用户的消息,例如鼠标点击、键盘输入等。
我们可以使用ON_WM_XXX宏将消息和相应的成员函数关联起来。
5.绘制控件:在绘制控件时,我们可以重写控件类的OnPaint函数。
在OnPaint函数中,我们可以使用CDC类的成员函数来绘制自定义的图形。
6.响应交互:根据自定义的需求,我们可以在控件类中重写一些成员函数来响应用户的交互。
例如,在Button控件中,我们可以重写OnLButtonDown函数来响应鼠标左键的点击事件。
7.添加消息处理:在控件类中,我们可以添加自定义的消息处理函数来处理特定的业务逻辑。
例如,在自定义的列表框中,我们可以添加一个AddItem函数来向列表中添加项目。
8.发送和接收消息:在需要与其他窗口或控件进行通信时,我们可以使用SendMessage和PostMessage函数来发送消息,并在控件类中重写相应的消息处理函数来接收并处理这些消息。
ActiveX控件添加应用指南在有些应用软件中,比如VC、VB、CVI等,ActiveX控件中缺少具体的一些功能控件,如chart控件等,需要从网上下载一个MSCHRT20.OCX文件,在下图中红圈中选择“运行”,打开后出现如下窗口:在窗口里输入regsvr32 D:mschrt20.ocx,“D:mschrt20.ocx”为mschrt20.ocx文件所在位置点击确定,就完成了添加。
如果运行时又出现了“ActiveX control is not licensed for this operation ”或类似提示,则需要用“记事本”格式的文档将以下程序复制并保存,且必须将此程序保存为XXX.reg格式(注册表格式),然后直接双击此reg格式的文件,就完成了许可(授权)。
Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\Licenses]@="Licensing: Copying the keys may be a violation of established copyrights."[HKEY_CLASSES_ROOT\Licenses\096EFC40-6ABF-11cf-850C-08002B30345D]@="knsgigmnmngnmnigthmgpninrmumhgkgrlrk"[HKEY_CLASSES_ROOT\Licenses\12B142A4-BD51-11d1-8C08-0000F8754DA1]@="aadhgafabafajhchnbchehfambfbbachmfmb"[HKEY_CLASSES_ROOT\Licenses\190B7910-992A-11cf-8AFA-00AA00C00905]@="gclclcejjcmjdcccoikjlcecoioijjcjnhng"[HKEY_CLASSES_ROOT\Licenses\1F3D5522-3F42-11d1-B2FA-00A0C908FB55]@="gcfjdjecpchcncdjpdejijgcrdoijjfcieod"[HKEY_CLASSES_ROOT\Licenses\1FB639E1-771F-11d1-8FD4-00A0C91E29D5]@="ldaskjeinankjgbnkcejnkrgnkvntkhzkhbtnkste"[HKEY_CLASSES_ROOT\Licenses\2AC5863D-48B9-490c-ACD3-B7723A1FEB9E]@="wrtgfdsbvxgfsdyuihjknmvcxgasdwqersdfdfsdyu"[HKEY_CLASSES_ROOT\Licenses\2c49f800-c2dd-11cf-9ad6-0080c7e7b78d]@="mlrljgrlhltlngjlthrligklpkrhllglqlrk"[HKEY_CLASSES_ROOT\Licenses\38911DA0-E448-11D0-84A3-00DD01104159]@="mcpckchcdchjcjcclidcgcgchdqdcjhcojpd"[HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]@="kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"[HKEY_CLASSES_ROOT\Licenses\43478d75-78e0-11cf-8e78-00a0d100038e]@="imshohohphlmnhimuinmphmmuiminhlmsmsl"[HKEY_CLASSES_ROOT\Licenses\46D504D7-557F-4C19-A4DD-6605411EF496]"6A7693BA-3139-41fd-BF3D-299961C965D5"="01000000d08c9ddf0115d1118c7a00c04fc297e b01000000b0cfa8651eed814ea8aa77984d181953040000001800000056005300200050004900440 020*******e0066006f00000003660000a80000001000000056a66542c85db014774bffecdc56384e0000000004800000a000000010000000b10a1f771bc4b05515b611500ced2faf10000000263d1b0a 183042c62cd7792b75683b4e14000000f30b3972d0fa2871120efa9fba18a3c245e584c2"@="gknalnanccemnhitviluhawerycnonilwjawreacop""CCF5A555-D92E-457b-9235-2B326B64035A"="01000000d08c9ddf0115d1118c7a00c04fc297e b01000000b0cfa8651eed814ea8aa77984d181953040000001800000056005300200050004900440 020*******e0066006f00000003660000a8000000100000003311a4ed781bba0eb740244ec6be37e 10000000004800000a0000000100000000ef4da56cd76cee7c81f1227b555434f080000000beff2eed 562c9a114000000b389c01205cde0aa29234083954295bef840a8c3"[HKEY_CLASSES_ROOT\Licenses\4D553650-6ABE-11cf-8ADB-00AA00C00905]@="gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj"[HKEY_CLASSES_ROOT\Licenses\4F86BADF-9F77-11d1-B1B7-0000F8753F5D]@="iplpwpnippopupiivjrioppisjsjlpiiokuj"[HKEY_CLASSES_ROOT\Licenses\556C75F1-EFBC-11CF-B9F3-00A0247033C4]@="xybiedobrqsprbijaegcbislrsiucfjdhisl"[HKEY_CLASSES_ROOT\Licenses\57CBF9E0-6AA7-11cf-8ADB-00AA00C00905]@="aahakhchghkhfhaamghhbhbhkbpgfhahlfle"[HKEY_CLASSES_ROOT\Licenses\5BCBC240-27DF-49C1-8C1C-27B8463009A9]"6A7693BA-3139-41fd-BF3D-299961C965D5"="01000000d08c9ddf0115d1118c7a00c04fc297e b01000000b0cfa8651eed814ea8aa77984d18195304000000560000004d006900630072006f00730 06f00660074002000560069007300750061006c002000530074007500640069006f002000540072 00690061006c002000450064006900740069006f006e0020006400610074006100000003660000a 800000010000000c7e1d2e887c57b9814ce91d6c44249ae0000000004800000a0000000100000003 5f65ddd0c11d820b0b7a72d384e4f0810*******e568533309b0e78012ede394f29e6d81400000080 691310641b0c5f28070f7f29fe3acb3d3531a9"@="iqtdwslvccydcyhxabrcudupqdcalezvinyxwsdjgb""CCF5A555-D92E-457b-9235-2B326B64035A"="01000000d08c9ddf0115d1118c7a00c04fc297e b01000000b0cfa8651eed814ea8aa77984d18195304000000560000004d006900630072006f00730 06f00660074002000560069007300750061006c002000530074007500640069006f002000540072 00690061006c002000450064006900740069006f006e0020006400610074006100000003660000a 800000010000000157910d280b079e9030212f831ef8dd00000000004800000a0000000100000009 1b4ddfcf5198d358efe2a227e391200080000008943decdf61422b0140000006eafe0247bfe0b38ba3 4c5a3fc6106d9bae97edb"[HKEY_CLASSES_ROOT\Licenses\6000720D-F342-11D1-AF65-00A0C90DCA10]@="kefeflhlhlgenelerfleheietfmflelljeqf"[HKEY_CLASSES_ROOT\Licenses\6FB38640-6AC7-11cf-8ADB-00AA00C00905]@="gdjkokgdldikhdddpjkkekgknesjikdkoioh"[HKEY_CLASSES_ROOT\Licenses\72E67120-5959-11cf-91F6-C2863C385E30]@="ibcbbbebqbdbciebmcobmbhifcmciibblgmf"[HKEY_CLASSES_ROOT\Licenses\73A4C9C1-D68D-11d0-98BF-00A0C90DC8D9] [HKEY_CLASSES_ROOT\Licenses\73A4C9C1-D68D-11d0-98BF-00A0C90DC8D9\11.0][HKEY_CLASSES_ROOT\Licenses\73A4C9C1-D68D-11d0-98BF-00A0C90DC8D9\11.0\Retail ]@="sbbcdcprktpjtapmmfdacmupasbhscddncgp"[HKEY_CLASSES_ROOT\Licenses\743A8267-4958-460e-B757-7110EED3D53C]@="erwreffdrtetyuiopupoinjxsdfwdxvdgwertdxoui"[HKEY_CLASSES_ROOT\Licenses\74872840-703A-11d1-A3AF-00A0C90F26FA]@="mninuglgknogtgjnthmnggjgsmrmgniglish"[HKEY_CLASSES_ROOT\Licenses\74872841-703A-11d1-A3AF-00A0C90F26FA]@="klglsejeilmereglrfkleeheqkpkelgejgqf"[HKEY_CLASSES_ROOT\Licenses\78E1BDD1-9941-11cf-9756-00AA00C00908]@="yjrjvqkjlqqjnqkjvprqsjnjvkuknjpjtoun"[HKEY_CLASSES_ROOT\Licenses\7C35CA30-D112-11cf-8E72-00A0C90F26F8]@="whmhmhohmhiorhkouimhihihwiwinhlosmsl"[HKEY_CLASSES_ROOT\Licenses\80E80EF0-DBBE-11D0-BCE2-00A0C90DCA10]@="qijimitpmpnpxplpvjnikpkpqoxjmpkpoivj"[HKEY_CLASSES_ROOT\Licenses\899B3E80-6AC6-11cf-8ADB-00AA00C00905] @="wjsjjjlqmjpjrjjjvpqqkqmqukypoqjquoun"[HKEY_CLASSES_ROOT\Licenses\9DF1A470-BA8E-11D0-849C-00A0C90DC8A9] @="cchcqjejhcgcqcfjpdfcdjkckiqikchcojpd"[HKEY_CLASSES_ROOT\Licenses\9E799BF1-8817-11cf-958F-0020AFC28C3B]@="uqpqnqkjujkjjjjqwktjrjkjtkupsjnjtoun"[HKEY_CLASSES_ROOT\Licenses\A133F000-CCB0-11d0-A316-00AA00688B10] @="cibbcimbpihbbbbbnhdbeidiocmcbbdbgdoc"[HKEY_CLASSES_ROOT\Licenses\a8a9f020-b426-11cf-bf3b-00a0d10003fa]@="eesjgjnekjeeheijrfheiegepftigeljfepi"[HKEY_CLASSES_ROOT\Licenses\AC0871D0-6ACC-11cf-8ADB-00AA00C00905] @="knjnpgognginknggsmnnhnjnumvmlngnrlrk"[HKEY_CLASSES_ROOT\Licenses\AEA64E56-7C97-4a1c-8974-4E0BB4E48FCD] @="reuikcxsdrecfgfbvnhjkjlpouiyuqwsdrtrtbvgcv"[HKEY_CLASSES_ROOT\Licenses\B1692F60-23B0-11D0-8E95-00A0C90F26F8] @="mjjjccncgjijrcfjpdfjfcejpdkdkcgjojpd"[HKEY_CLASSES_ROOT\Licenses\B1EFCCF0-6AC1-11cf-8ADB-00AA00C00905] @="qqkjvqpqmqjjpqjjvpqqkqmqvkypoqjquoun"[HKEY_CLASSES_ROOT\Licenses\BC96F860-9928-11cf-8AFA-00AA00C00905] @="mmimfflflmqmlfffrlnmofhfkgrlmmfmqkqj"[HKEY_CLASSES_ROOT\Licenses\C4145310-469C-11d1-B182-00A0C922E820]@="konhqhioohihphkouimonhqhvnwiqhhhnjti"[HKEY_CLASSES_ROOT\Licenses\CDE57A55-8B86-11D0-b3C6-00A0C90AEA82] @="ekpkhddkjkekpdjkqemkfkldoeoefkfdjfqe"[HKEY_CLASSES_ROOT\Licenses\CEDD4F80-B43C-11cf-837C-00AA00573EDE] @=hex(2):67,00,78,00,77,00,61,00,65,00,7a,00,75,00,63,00,66,00,79,00,71,00,70,\ 00,77,00,6a,00,67,00,71,00,62,00,63,00,6d,00,74,00,73,00,6e,00,63,00,75,00,\68,00,77,00,73,00,6e,00,79,00,68,00,69,00,6f,00,68,00,77,00,78,00,7a,00,00,\00[HKEY_CLASSES_ROOT\Licenses\D015B071-D2ED-11d0-A31A-00AA00688B10] @="gjdcfjpcmjicjcdcoihcechjlioiccechepd"[HKEY_CLASSES_ROOT\Licenses\DC4D7920-6AC8-11cf-8ADB-00AA00C00905] @="iokouhloohrojhhhtnooiokomiwnmohosmsl"[HKEY_CLASSES_ROOT\Licenses\E32E2733-1BC5-11d0-B8C3-00A0C90DCA10] @="kmhfimlflmmfpffmsgfmhmimngtghmoflhsg"[HKEY_CLASSES_ROOT\Licenses\ED4B87C4-9F76-11d1-8BF7-0000F8754DA1] @="knlggnmntgggrninthpgmnngrhqhnnjnslsh"[HKEY_CLASSES_ROOT\Licenses\F2E1F428-5B9A-4a69-B1F4-28C3C644168A] @="werdfswerxcvfdsertfyuijhnmujhkuyhjkhjkyuiw"[HKEY_CLASSES_ROOT\Licenses\F4FC596D-DFFE-11CF-9551-00AA00A3DC45] @="mbmabptebkjcdlgtjmskjwtsdhjbmkmwtrak"。
MFC中自定义控件的使用方式如下:1. 创建一个新的类,继承自CWnd或CButton等需要扩展的控件类。
2. 重载控件类的消息处理函数,如OnPaint、OnLButtonDown等。
3. 在需要使用自定义控件的地方,实例化该控件类并调用其Create成员函数进行创建。
4. 将创建好的控件添加到窗口或其他容器中。
以下是一个简单的自定义控件示例:```cpp// MyCustomControl.h#pragma onceclass CMyCustomControl : public CButton{public:CMyCustomControl();virtual ~CMyCustomControl();protected:afx_msg void OnPaint();DECLARE_MESSAGE_MAP()};``````cpp// MyCustomControl.cpp#include "MyCustomControl.h"CMyCustomControl::CMyCustomControl(){}CMyCustomControl::~CMyCustomControl(){}BEGIN_MESSAGE_MAP(CMyCustomControl, CButton)ON_WM_PAINT()END_MESSAGE_MAP()void CMyCustomControl::OnPaint(){CPaintDC dc(this); // device context for paintingCRect rect;GetClientRect(&rect); // get client area rectangleCDC memDC; // create memory device contextmemDC.CreateCompatibleDC(&dc); // create compatible DC with paint DCCBitmap bitmap; // create bitmap objectbitmap.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height()); // create bitmap with client area sizeCBitmap* pOldBitmap = memDC.SelectObject(&bitmap); // select bitmap into memory DC for drawing// draw your custom content here using memDC and bitmap objects// ...memDC.SelectObject(pOldBitmap); // restore old bitmap object from memory DCbitmap.DeleteObject(); // delete bitmap object when done with itmemDC.DeleteDC(); // delete memory DC when done with it}```在需要使用自定义控件的地方:```cpp// MainFrm.cpp or other relevant file#include "MyCustomControl.h"// ...CMyCustomControl* pCtrl = new CMyCustomControl(); // create custom control instancepCtrl->Create(WS_CHILD | WS_VISIBLE, CRect(10, 10, 100, 50), this, IDC_MYCUSTOMCTRL); // create custom control and add to parent window or container (e.g., CFrameWnd) as child control with ID IDC_MYCUSTOMCTRL```。
mfc2019 类库参考手册MFC 2019 类库参考手册一、概述MFC(Microsoft Foundation Class)是微软公司为了简化Windows 应用程序开发而开发的类库。
本手册将详细介绍MFC 2019类库的各个模块,包括类的定义、成员函数、属性和示例等内容,为开发人员提供全面且准确的参考。
二、基础类1. CObject类CObject类是MFC类库的基类,所有MFC类都从该类派生。
本节将介绍CObject类的成员函数、构造函数和析构函数。
2. CWnd类CWnd类封装了Windows窗口的操作。
本节将介绍CWnd类的常用成员函数,如Create、ShowWindow和SendMessage等。
3. CWinApp类CWinApp类是一个应用程序对象类,每个MFC应用程序都必须拥有一个CWinApp类的派生类。
本节将介绍CWinApp类的初始化、消息循环和资源管理等功能。
三、窗口和控件类1. CFrameWnd类CFrameWnd类是MFC应用程序的主框架窗口类,它提供了标题栏、菜单、工具栏和状态栏等功能。
本节将介绍CFrameWnd类的创建和布局等操作。
2. CDialog类CDialog类是MFC应用程序中常用的对话框类,用于创建模态或非模态对话框。
本节将介绍CDialog类的创建和消息处理等方法。
3. CButton类CButton类封装了Windows中的按钮控件,提供了按钮的创建、属性设置和消息处理等功能。
本节将介绍CButton类的常用成员函数,如Create、SetCheck和EnableWindow等。
4. CEdit类CEdit类封装了Windows中的编辑框控件,可用于接受用户的输入和显示文本内容。
本节将介绍CEdit类的创建、文本操作和消息处理等方法。
四、绘图和界面类1. CDC类CDC类提供了对设备上下文的封装,用于进行绘图和界面操作。
本节将介绍CDC类的绘图函数,如LineTo、Rectangle和TextOut等。
MFC ActiveX 控件
ActiveX 控件是基于组件对象模型(COM) 的可重用软件组件,它支持广泛的OLE 功能并可自定义以满足多种软件的需要。
ActiveX 控件旨在用于普通的ActiveX 控件容器和Int ernet上的万维网页。
您既可以用此处介绍的MF C 也可以用活动模板库(ATL)来创建 ActiveX 控件。
ActiveX 控件可以在自己的窗口中对自身进行描述,对事件(如单击鼠标)做出响应,并可以通过包括属性和方法的接口进行管理,这些属性和方法与自动化对象中的属性和方法相似。
可以为许多用途(如数据库访问、数据监视或图形绘制)开发这些控件。
除可移植性外,ActiveX 控件还支持先前所不具备的功能,如与现有 OLE 容器的兼容性和将其菜单与 OLE 容器的菜单集成在一起的能力。
另外,ActiveX 控件完全支持自动化,使控件得以公开读/写属性和一组可由控件用户调用的方法。
可以创建无窗口的 ActiveX 控件和只有在活动时才创建窗口的控件。
无窗口控件可加速应用程序的显示并可包含透明控件和非矩形控件。
也可以异步加载 ActiveX 控件的属性。
ActiveX 控件作为进程内服务器(通常是一个小型对象)实现,而进程内服务器可用于任何 OLE 容器。
请注意,只有在识别ActiveX 控件的 OLE 容器内使用时,ActiveX 控件的全部功能才可用。
有关支持 ActiveX 控件的容器列表,请参见将 ActiveX 控件应用到其他应用程序中。
这种容器类型(以后称为“控件容器”)可以通过使用 ActiveX 控件的属性和方法来操作该控件,并可以从 ActiveX 控件接收事件形式的通知。
下图演示了此交互。
ActiveX 控件容器与有窗口的 ActiveX 控件之间的交互
有关优化 ActiveX 控件的某些最新信息,请参见MF C ActiveX 控件:优化。
若要创建MFC ActiveX 控件,请参见创建ActiveX 控件项目。
有关更多信息,请参见:
∙ActiveX 控件容器
∙活动文档
∙使用 ActiveX 控件
∙了解 ActiveX 控件
∙升级已有 ActiveX 控件以用于Internet
∙为MFC ActiveX 控件添加区分上下文的帮助
∙示例
ActiveX 控件的基本组件
ActiveX 控件使用几个编程元素与控件容器和用户有效地进行交互。
这些元素是 COleCont rol 类、一组事件引发函数和调度映射。
您开发的每个ActiveX 控件对象都从其MF C 基类COleControl继承一组强大的功能。
这些功能包括就地激活和自动化逻辑。
COleControl可为控件对象提供与MF C 窗口对象相同的功能,并提供引发事件的能力。
COleControl 还可提供无窗口控件。
无窗口控件依赖其容器的帮助获得窗口提供的某些功能(鼠标捕获、键盘焦点、滚动),但显示速度快得多。
由于该控件类是从COleControl派生的,因此它继承了在满足某些条件时,向控件容器发送或“引发”消息(称为事件)的能力。
这些事件用于在控件中发生重要的事情时通知控件容器。
通过向事件附加参数,可将关于事件的其他信息发送到控件容器。
有关 ActiveX 控件事件的更多信息,请参见文章MF C ActiveX 控件:事件。
最后的元素是调度映射,它用于向控件用户公开一组函数(称为方法)和特性(称为属性)。
属性使控件容器或控件用户得以以各种方式操作控件。
用户可以更改控件的外观、更改控件的某些值或生成控件请求(如访问控件所维护的特定数据片段)。
该接口由控件开发人员确定并通过“类视图”定义。
有关 ActiveX 控件方法和属性的更多信息,请参见文章MFC ActiveX 控件:方法和属性。
有窗口的控件与ActiveX 控件容器之间的交互
当在控件容器内使用控件时,该控件使用两种机制进行通信:一种是公开属性和方法,一种是引发事件。
下图演示了这两种机制的实现方式。
ActiveX 控件容器与 ActiveX控件之间的通信
上图还阐释了控件如何处理除自动化和事件之外的其他OLE 接口。
控件与容器进行的所有通信都由COleControl执行。
为处理容器的某些请求,CO leControl调用在控件类中实现的成员函数。
所有方法和部分属性都是以此方式处理的。
控件类也可以通过调用CO leControl的成员函数来初始化与容器的通信。
事件是以此方式引发的。
ActiveX 控件的活动状态和非活动状态
控件有两种基本状态:活动和非活动。
传统上,根据控件是否有窗口来区分这两种状态。
活动控件有窗口,而非活动控件没有窗口。
引入了无窗口激活后,这种区别不再通用,但仍适用于许多控件。
当无窗口控件处于活动状态时,它从其容器调用鼠标捕获、键盘焦点、滚动和其他窗口服务。
除了可以创建等待直到被激活以创建窗口的控件外,还可以为非活动控件提供鼠标交互。
当有窗口的控件处于活动状态时,它能够与控件容器、用户和Windows 进行完全交互。
下图演示了 ActiveX 控件、控件容器和操作系统之间的通信路径。
有窗口的 ActiveX 控件(活动时)中的W indow s 消息处理
序列化
序列化数据的能力(有时称为持久性)使控件得以将其属性值写入持久性存储。
这样就可以通过从存储读取对象状态来重新创建控件。
请注意,控件并不负责获取对存储媒体的访问。
相反,控件的容器负责为控件提供存储媒体以便在适当的时候使用。
有关序列化的更多信息,请参见文章MF C ActiveX 控件:序列化。
有关优化序列化的信息,请参见“ActiveX 控件:优化”中的优化持久性和初始化。
安装ActiveX 控件类和工具
安装 Visual C++ 时,如果在安装过程中选择了 ActiveX 控件(默认情况下选择它们),则将自动安装MF C ActiveX 控件类和发布及调试ActiveX 控件运行时DLL。
默认情况下,ActiveX 控件类和工具安装在\Program Files\Microsoft Visual Studio .NET 下的下列子目录中:∙\Common7\Tools
包含测试容器文件(Tst Con32.exe 及其帮助文件)。
∙\Vc7\atlmfc\include
包含使用MF C 开发 ActiveX 控件所需的包含文件
∙\Vc7\atlmfc\src\mfc
包含MFC 中特定 ActiveX 控件类的源代码
∙\Vc7\atlmfc\lib
包含使用MF C 开发 ActiveX 控件所需的库
还有MFC ActiveX 控件的示例。
有关这些示例的更多信息,请参见控件示例:基于MF C 的ActiveX 控件。