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自定义控件编写过程MFC(Microsoft Foundation Classes)是一个C++应用程序框架,用于开发Windows应用程序。
它提供了许多已经封装好的类和方法,用于开发Windows GUI应用程序。
MFC提供了丰富的控件,但有时我们可能需要开发自定义控件来满足特定的需求。
下面是MFC自定义控件的编写过程。
1.创建MFC项目首先,打开Visual Studio,并选择创建一个新的MFC应用程序项目。
在创建向导中,选择一个适当的应用程序类型和选项,然后指定项目的名称和位置。
点击“完成”按钮创建项目。
2.设计控件界面3.为控件添加代码4.自定义控件逻辑在项目中生成自定义控件的处理逻辑。
打开控件的源文件,并为其添加相应的消息和事件处理函数。
例如,如果要在按钮控件上添加单击事件处理函数,请在对应的按钮控件的单击事件处理函数中添加代码。
您还可以根据需要添加特定的功能和逻辑。
5.编译和测试在完成自定义控件的编码后,可以进行编译测试。
选择“生成”菜单中的“解决方案”选项,或者使用快捷键Ctrl + Shift + B来编译项目。
然后选择“调试”菜单中的“以调试模式启动”选项,或者使用快捷键F5来运行项目。
检查自定义控件是否按预期工作。
6.部署自定义控件一旦自定义控件编写完成并通过了测试,可以将其部署到其他项目中使用。
将自定义控件的源文件和相关资源文件复制到新的项目中,然后在新的项目中按照相同的方式创建控件界面并添加代码。
总结:MFC自定义控件的编写过程可以简单概括为创建MFC项目、设计控件界面、添加代码、自定义控件逻辑、编译和测试以及部署自定义控件。
通过遵循这个过程,我们可以轻松地在MFC应用程序中开发和使用自定义控件,以满足特定需求。
编写自定义控件需要熟悉MFC框架和相关的C++编程知识,对于有经验的开发人员来说是相对简单的任务。
mfc调用active控件
MFC(Microsoft Foundation Class)是一种用于开发Windows 应用程序的C++类库,而ActiveX控件是一种可重用的软件组件,通常用于在Web浏览器或其他容器应用程序中显示交互式内容。
在MFC中调用ActiveX控件可以通过以下步骤实现:
1. 首先,你需要在MFC应用程序中创建一个对话框或视图来容纳ActiveX控件。
你可以在资源编辑器中添加一个ActiveX控件,或者在代码中动态创建和添加ActiveX控件。
2. 然后,你需要在MFC应用程序中使用类向导来生成ActiveX 控件的包装类。
在Visual Studio中,你可以使用“添加类”对话框来生成包装类。
3. 生成包装类后,你可以在对话框或视图类的代码中实例化ActiveX控件的包装类对象,并调用其方法或设置其属性。
例如,你可以使用Create函数创建ActiveX控件的实例,并使用其提供的方法来实现所需的功能。
4. 最后,在MFC应用程序的消息映射函数中处理ActiveX控件
的事件,例如按钮点击事件或文本框内容改变事件。
你可以通过包装类提供的事件映射功能来实现对ActiveX控件事件的处理。
总的来说,MFC调用ActiveX控件涉及到创建包装类、实例化控件对象、调用控件方法和处理控件事件等步骤。
通过这些步骤,你可以在MFC应用程序中有效地使用ActiveX控件实现丰富的交互式功能。
ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。
这个容器包括WEB网页,应用程序窗体等。
ActiveX控件的后缀名是OCX或者DLL。
一般是以OCX和动态库共存的形式打包成cab或者exe的文件放在服务器上,客户端下载后运行安装cab或exe解压成OCX和动态库共存的文件,然后注册ocx文件。
ActiveX控件是基于COM标准,使得软件部件在网络环境中进行交互的技术集。
它与具体的编程语言无关。
作为针对Internet应用开发的技术,ActiveX被广泛应用于WEB 服务器以及客户端的各个方面。
同时,ActiveX技术也被用于方便地创建普通的桌面应用程序,此外ActiveX一般具有界面。
2.三个概念:ActiveX、OLE和COM从时间的角度讲,OLE是最早出现的,然后是COM和ActiveX;从体系结构角度讲,OLE和ActiveX是建立在COM之上的,所以COM是基础;单从名称角度讲,OLE、ActiveX 是两个商标名称,而COM则是一个纯技术名词,这也是大家更多的听说ActiveX和OLE 的原因。
COM是应OLE的需求而诞生的,所以虽然COM是OLE的基础,但OLE的产生却在COM之前。
COM的基本出发点是,让某个软件通过一个通用的机构为另一个软件提供服务。
ActiveX最核心的技术还是COM。
ActiveX和OLE的最大不同在于,OLE针对的是桌面上应用软件和文件之间的集成,而ActiveX则以提供进一步的网络应用与用户交互为主。
COM对象可以用C++、Java和VB等任意一种语言编写,并可以用DLL或作为不同过程工作的执行文件的形式来实现。
使用COM对象的浏览器,无需关心对象是用什么语言写的,也无须关心它是以DLL还是以另外的过程来执行的。
从浏览器端看,无任何区别。
这样一个通用的处理技巧非常有用。
3.ActiveX控件工程的创建使用VS2013有两种方式可以创建ActiveX工程:第一种:创建“MFC ActiveX Control”工程;第二种:创建“ATL 项目”。
MFC控件使用详细教程MFC(Microsoft Foundation Classes)是微软公司开发的一套面向对象的C++类库,旨在简化Windows应用程序的开发。
其中包括了一系列的控件类,用于构建Windows用户界面。
本文将介绍MFC控件的使用,并提供详细的教程。
1.创建MFC应用程序首先,打开Visual Studio开发环境,选择创建MFC应用程序项目。
在项目向导中,选择“对话框”应用程序类型。
2.添加控件到对话框在MFC应用程序中,用户界面的主要组成部分是对话框。
打开对话框资源文件(通常是一个名为“MainDlg”的文件),可以看到空白的对话框。
从工具箱中选择所需的控件,例如按钮(Button)、文本框(Edit Control)等。
点击工具箱中的控件,然后在对话框上绘制一个矩形,即可在对话框中添加该控件。
3.设置控件属性选中添加的控件,可以在“属性”窗口中设置其属性。
例如,可以设置按钮的文本、大小、位置等。
4.响应控件事件控件可以触发各种事件,例如按钮点击事件。
为了响应这些事件,我们需要添加相应的事件处理程序。
在资源视图中,右键点击对话框资源文件,选择“添加事件处理程序”。
然后,选择要响应的事件,例如按钮的点击事件。
在出现的对话框中,输入事件处理程序的名称,并选择成员变量的名称。
点击“确定”后,Visual Studio会自动生成事件处理程序的代码。
5.控件的常用操作- 设置控件的文本:使用SetWindowText函数,例如SetWindowText("Hello");- 获取控件的文本:使用GetWindowText函数,例如CString str; GetWindowText(str);- 启用或禁用控件:使用EnableWindow函数,例如EnableWindow(FALSE)可以禁用控件;- 显示或隐藏控件:使用ShowWindow函数,例如ShowWindow(SW_HIDE)可以隐藏控件;- 设置或获取控件的位置、大小:使用SetWindowPos和GetWindowRect函数,例如SetWindowPos(NULL, x, y, width, height)可以设置控件的位置和大小;- 样式和外观设置:使用ModifyStyle和SetWindowLong函数,例如在按钮上设置图标和文字风格。
VC2005开发MFC ActiveX控件基础教程一.创建MFC ActiveX项目1.打开VS2005新建MFC项目。
这里我们取名为“ActiveXDemo”。
2.输入项目名称为“ActiveXDemo”和项目位置。
点击“确定”按钮,打开向导对话框。
3.选择“控件设置”选项卡,具体设置可参考上图。
其它选项卡为默认设置。
最后点击“完成”按钮保存设置。
二.添加控件方法VC2005会为我们自动创建好MFC ActiveX程序框架,我们只要给该ActiveX控件添加方法即可。
现在我们给控件添加一个“AddFun”方法,这个方法是将两个数相加并返回结果。
1.点击“视图”,打开“类视图”窗口。
2.展开“ActiveXDemoLib”项,选中“_DActiveXDemo”项。
点击鼠标右键,选择“添加”下的“添加方法”。
3.打开添加方法向导窗口。
因为我们是添加一个加法方法,所以我们设置的返回类型为LONG型,方法名设为AddFun,添加两个LONG类型参数Add1,Add2。
4.其它为默认设置,点击“完成”按钮完成添加方法。
接下来我们打开“解决方案资源管理器”打开“ActiveXDemoCtrl.cpp”文件。
5.打开代码视图,我们会发现VC2005已经为我们添加了一个“AddFun”方法,我们在方法内添加“returnAdd1 + Add2;”语句。
6.最后生成项目。
三.测试ActiveX控件经过上面操作我们已经生成了OCX控件文件。
接下来的步骤就是要将这个OCX控件嵌入在Html 页面中,通过Javascript来调用控件方法来测试我们的OCX控件是否能正常运行。
1.我们用“EditPlus”新建一个Html文件,具体内容如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or g/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>ActiveX测试</title><script language = 'javascript'>function AddFun(){var iResult = MYAvtiveX.AddFun(12, 11);//调用ActiveX控件的AddFun方法。
使用MFC开发ActiveX控件全过程Visual C++是开发ActiveX控件的强大工具,它的特点是开发周期短、便于使用,因此它已经成为开发ActiveX控件的主要工具之一。
Visual C++集成开发环境,使用了微软自己的类库MFC,MFC对开发Ac tiveX控件提供了全面的支持,本文讲述的过程均在Visual C++ 6.0(以下简称VC)中实现。
1、创建工程:对于使用过VC的人,可以很容易地创建一个开发ActiveX控件的工程,没有使用过VC的人,按照下面的操作步骤,也可以很快创建一个同样的工程出来。
第一步:“File”—>“New”—>“(Projects)MFC ActiveX ControlWizard”,在“Project Name”中输入合适的工程名(以test为例),在“Location”中选择工程文件存放路径,然后,“OK”进入下一步;第二步:选择你想在这个工程中生成的ActiveX控件的个数(至少一个),其余选项决定是否生成一些辅助文件,通常按照默认设置即可,“Next”进入下一步;第三步:编辑你的工程中各个类和文件的名称,配置一些辅助选项,可以全部选择默认设置,“Fini sh”进入下一步;第四步:展示向导为你的工程生成的各种配置信息,“Cancel”重新设置不满意的选项,“OK”结束工程的创建。
2、绘制控件:MFC将对ActiveX控件的支持封装在COleControl类中,所有ActiveX控件均从这个类派生。
绘制控件的全部操作则集中在一个虚函数中—OnDraw(),其默认实现如下:void CTestCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid){// TODO: Replace the following code with your own drawing code.pdc->FillRect(rcBounds,CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));pdc->Ellipse(rcBounds);}可以看到,OnDraw()函数的默认实现是在矩形rcBounds中绘制一个椭圆,通过改写OnDraw()函数中的内容,就可以绘制自己想要的控件了。
Reader 控件函数库目录目录 (2)1.1 控件注册 (5)1.2 读卡器功能开发流程 (6)1.2.1 设备驱动的打开与关闭 (6)1.2.2 获取天线感应区的标签 (6)1.2.3标签数据区的读写 (8)2.编程接口 (11)2.1 读卡器通用接口 (11)2.1.1 RDR_OpenPort (11)2.1.2 RDR_OpenUSB (12)2.1.3 RDR_OpenNet (13)2.1.4 RDR_Close (14)2.1.5 COMPort_Enum (15)2.1.6 COMPort_GetEnumItem (16)2.1.7 RDR_InitInventory (17)2.1.8 RDR_Enable15693 (18)2.1.9 RDR_Enable14443A (19)2.1.10 RDR_Inventory (20)2.1.11 RDR_GetRecordCnt (21)2.1.12 GetRecord (22)2.13 RDR_FinishInventory (23)2.1.14 RDR_SetCommuImmeTimeout (24)2.1.15 RDR_ResetCommuImmeTimeout (25)2.1.16 RDR_SetAcessAntenna (26)2.1.17 RDR_OpenRFTransmitter (27)2.1.18 RDR_CloseRFTransmitter (28)2.1.19 RDR_GetOutputCount (29)2.1.20 RDR_GetOutputName (30)2.1.21 RDR_GetReaderInfor (31)2.1.22 RDR_TagDisconnect (32)2.1.23 RDR_SetOutput (33)2.1.24 RDR_GetReaderLastReturnError (34)2.2 ISO15693协议通用接口 (35)2.2.1 ISO15693_Connect (35)2.2.2 ISO15693_ReadSingleBlock (36)2.2.3 ISO15693_WriteSingleBlock (37)2.2.4 ISO15693_ReadMultiBlocks (38)2.2.5 ISO15693_WriteMultipleBlocks (39)2.2.6 ISO15693_LockBlock (40)2.2.7 ISO15693_WriteAFI (41)2.2.8 ISO15693_LockAFI (42)2.2.9 ISO15693_WriteDSFID (43)2.2.11 ISO15693_GetSystemInfo (45)2.2.12 ISO15693_LockMultipleBlocks (46)2.3 NXP ICODE-SLI自定义命令 (47)2.3.1 NXPICODESLI_EableEAS (47)2.3.2 NXPICODESLI_DisableEAS (48)2.3.3 NXPICODESLI_LockEAS (49)2.3.4 NXPICODESLI_EASAlarm (50)2.4 NXP ICODE-SLIX 自定义命令 (51)1.4.1 NXPICODESLIX_EableEAS (51)2.4.2 NXPICODESLIX_DisableEAS (52)2.4.3 NXPICODESLIX_LockEAS (53)2.4.4 NXPICODESLIX_EASAlarm (54)2.4.5 NXPICODESLIX_GetRandomNum (55)2.4.6 NXPICODESLIX_SetPassword (56)2.4.7 NXPICODESLIX_WritePassword (57)2.4.8 NXPICODESLIX_LockPassword (58)2.4.9 NXPICODESLIX_PasswordProtect (59)2.5 Tag-it HF-I plus 自定义命令 (60)2.5.1 TIHFIPLUS_Write2Blocks (60)2.5.2 TIHFIPLUS_Lock2Blocks (61)2.6 ST M24LR16E 自定义命令 (62)2.6.1 STM24LR16E_UpdatePassword (62)2.6.2 STM24LR16E_AuthPassword (63)2.6.3 STM24LR16E_ActivateSectorSecurity (64)2.6.4 STM24LR16E_ReadCFGByte (65)2.6.5 STM24LR16E_SetCFGEH (66)2.6.6 STM24LR16E_SetCtrlRegEHEN (67)2.6.7 STM24LR16E_ReadCtrlReg (68)2.7 ST M24LR64 自定义命令 (69)2.7.1 STM24LR64_UpdatePassword (69)2.7.2 STM24LR64_AuthPassword (70)2.7.3 STM24LR64_ActivateSectorSecurity (71)2.8 mifare classic (S50和S70)函数接口 (72)2.8.1 MFCL_Connect (72)2.8.2 MFCL_ReadBlock (73)2.8.3 MFCL_WriteBlock (74)2.8.4 MFCL_Authenticate (75)2.8.5 MFCL_Increment (76)2.8.6 MFCL_Decrement (77)2.8.7 MFCL_Restore (78)2.8.8 MFCL_FormatValueBlock (79)2.8.9 MFCL_CreateAccessCondition (80)2.8.10 MFCL_Sector2Block (81)2.8.12 MFCL_IsTailerBlock (83)2.9 mifare ultralight 函数接口 (84)2.9.1 ULTRALIGHT_Connect (84)2.9.2 ULTRALIGHT_Read (85)2.9.3 ULTRALIGHT_Write (86)2.9.4 ULTRALIGHT_LockPage (87)2.9.5 ULTRALIGHT_LockBlock (88)2.9.6 ULTRALIGHT_ReadMultiplePages (89)2.9.7 ULTRALIGHT_WriteMultiplePages (90)2.9.8 ULTRALIGHT_Authenticate (91)2.9.9 ULTRALIGHT_UpdatePassword (92)2.9.10 ULTRALIGHT_UpdateAuthConfig (93)2.9.11 ULTRALIGHT_AuthenSafe (94)3. 空中接口协议类型编码和标签类型编码定义 (95)3.1.空中接口协议类型编码定义 (95)3.2. 标签类型编码定义 (95)3.2.1. ISO15693标签类型编码定义 (95)3.2.2. ISO14443A 标签类型编码定义 (95)4. RFIDLIB API错误代码表 (96)1.控件调用流程1.1 控件注册进入目录“.\rfid_reader-读卡器开发包\HF-高频\samples\activeX\ocx”,如图1-1所示。
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 控件。