VC++编程,ActiveX控件嵌入

作者&投稿:阚雪 (若有异议请与网页底部的电邮联系)
VC++6.0 添加ActiveX控件~

使用AppWizard建立一个ActiveX控件工程。
请按如下步骤生成该控件:
1.在文件菜单中选择新建
2.在工程选项卡中选择MFC ActiveX Control Wizard
3.工程命名为Plot,然后确定进入下一步。
4.在“Step 1 of 2 ”对话框中接受默认选择,进入下一步。
5.在“Step 2of 2 ”对话框中的Which window class, if any, should this control subclass?下拉框中选择STATIC,用途使用它来显示数 据。
6.选择“Advanced”按钮,在“Flicker free activation (无闪烁)”前面打钩。
7.点击“Finish”按钮后,AppWizard会建立以下类:
CPlotApp类:派生于COleControlModule的程序类。COleControlModule是派生一个OLE模块对象的基类,此类为你的控件的初始化 (InitInstance) 与销毁(ExitInstance)提供成员函数。
CPlotCtrl类:派生于COleControl的类。为你的控件提供的功能函数最多,故大部分代码添加与此。
CPlotPropPage类:派生于COlePropertyPage的类。此类用与管理控件的属性页,同时也有相应的对话框资源来为你的控件提供属性页。
2。添加“固有的”属性。

使用AppWizard建立一个ActiveX控件工程。
请按如下步骤生成该控件:
1.在文件菜单中选择新建
2.在工程选项卡中选择MFC ActiveX Control Wizard
3.工程命名为Plot,然后确定进入下一步。
4.在“Step 1 of 2 ”对话框中接受默认选择,进入下一步。
5.在“Step 2of 2 ”对话框中的Which window class, if any, should this control subclass?下拉框中选择STATIC,用途使用它来显示数 据。
6.选择“Advanced”按钮,在“Flicker free activation (无闪烁)”前面打钩。
7.点击“Finish”按钮后,AppWizard会建立以下类:
CPlotApp类:派生于COleControlModule的程序类。COleControlModule是派生一个OLE模块对象的基类,此类为控件的初始化 (InitInstance) 与销毁(ExitInstance)提供成员函数。
CPlotCtrl类:派生于COleControl的类。为控件提供的功能函数最多,故大部分代码添加与此。
CPlotPropPage类:派生于COlePropertyPage的类。此类用与管理控件的属性页,同时也有相应的对话框资源来为控件提供属性页。
2。添加“固有的”属性。

自从Microsoft公司于1996年推出ActiveX技术以来,ActiveX技术已得到了许多软件公司的支持和响应,并纷纷在其产品中融入ActiveX技术。而作为ActiveX技术之一的ActiveX控件也得到了迅猛的发展,不但各大软件公司推出了不少ActiveX 控件,ActiveX控件更是得到一般开发者的喜爱。那么,什么是ActiveX控件呢?ActiveX控件是一个动态链接库,是作为基于COM服务器进行操作的,并且可以嵌入在包容器宿主应用程序中,ActiveX控件的前身就是OLE控件。由于ActiveX控件与开发平台无关,因此,在一种编程语言上开发的ActiveX控件可以无须任何修改,即可在另一种编程语言中使用,其效果如同使用Windows通用控件一样。如:在VC++中开发的ActiveX控件,不作任何修改即可应用于VB中。由此可见,通过使用ActiveX控件即可实现快速小型的组件重用、实现代码共享,从而提高编程效率。从上面亦可看出为何ActiveX控件如此广泛地受到开发者的欢迎。
因为ActiveX控件的可重用性,加上Internet的普及,ActiveX控件得到了极大的发展,目前,从Internet上可以得到相当多的ActiveX控件,而且品种繁多,所完成的任务几乎无所不包。对普通开发者来说,只要有耐心,都能从Internet上找到符合自己要求的ActiveX控件。

从Internet下载的ActiveX控件,或从其他途径得到的ActiveX控件,用户应该怎样做才能正确使用ActiveX控件或将其应用于自己的程序中呢?一般来说,一个外来ActiveX控件要在Windows中被正确使用,首先必须将控件文件(*.OCX)复制到硬盘中,然后将其在Windows中注册,未在Windows中注册过的ActiveX控件是不能使用的。注册ActiveX控件一般来说有三种途径:

1. 使用Regsvr32.exe程序对ActiveX控件进行注册;

2. 使用安装程序制作软件:InstallShield;

3. 在应用程序中加入注册代码。

上述方法适用范围不同,各有各的优点,下面分别讨论。

一、 使用Regsvr32.exe程序对ActiveX控件进行注册

对于未注册过的ActiveX控件可使用此软件对其进行注册,外来ActiveX控件要应用到自己的程序中也必须进行注册。该文件位于Windows目录的system子目录下。使用方法如下:点击“开始”→“运行”;在运行对话框中输入以下命令:

regsvr32 $#@60; 文件名 $#@62; 注册一个ActiveX控件
regsvr32 /u $#@60; 文件名 $#@62; 解除某ActiveX控件的注册
我们使用一些带A veX控件的应用程序时,有时会出现不能运行的情况,这有可能是其自带ActiveX控件未注册所至,这时不妨使用上述命令一试。另外,VC++使用者若对regsvr32.exe的编码感兴趣的话,可在VC++的联机帮助中找到其源代码。若使用VC++ 6.0,则在MSDN光盘的\sample\VC98\MFC\controls\regsvr中。
二、 使用安装程序制作软件:InstallShield

使用regsvr32.exe来注册ActiveX控件虽然简单,但需要用户手工注册,在不用时还得手工解除注册,因此,这对一个应用程序来说并非好的解决方案。大型应用软件一般都有一个安装程序,在安装程序中解决ActiveX控件注册是较为理想的一种方案。使用InstallShield可以制作出专业级的Setup,还可注册其中的ActiveX控件;而且,在以后携载软件时,自动注销掉以前注册的ActiveX控件。方法如下:

1. 启动InstallShield,使用Project Wizard建立一个新的项目;

2. 新建一个“File Group”,将需要注册的ActiveX控件文件放入此“File Group”中;

3. 将上述“File Group”的“Self-Registered”属性设置成“Yes”。

上述步骤仅为制作Setup中设置自动注册ActiveX控件几步,至于使用InstallShield怎样制作一个完整的Setup不在本文讨论范围之中,请读者自己参看有关书籍。

三、 在应用程序中加入注册代码

对于小型程序不宜采取第二种方法,较好的方法是在程序中嵌入注册代码,实现应用程序自注册。其编程方法是:

1. 使用Windows API函数LoadLibrary载入ActiveX控件;

2. 使用GetProcAddress函数获取ActiveX控件中注册函数DllRegisterServer(注销函数为DllUnregisterServer)指针;

3. 调用注册函数DllRegisterServer(或注销函数DllUnregisterServer)。

下面以VC++ 6.0编写的RegActivex程序为例,介绍怎样在程序中自动注册(注销)ActiveX控件。RegActivex的主体框架由VC++ 6.0的AppWizard自动产生,在其基础上增加两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”。当选择“注册ActiveX控件”菜单时,将对控件toweratl.ocx(一个汉诺游戏)进行注册;当选择“注销ActiveX控件”菜单时,将解除控件toweratl.ocx的注册。

1. 使用VC++ 6.0建立一个单文档的应用程序RegActivex,其他项目接受默认设置;

2. 给应用程序增加两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”,步骤如下:

① 单击VC++ 6.0左边窗口的“ResoureView”,双击MENU项目下的IDR_MAINFRAME以打开菜单编辑器;

② 在菜单编辑器中,加入一个主菜单“注册”,在“注册”主菜单下加入两个菜单项:“注册ActiveX控件”、“注销ActiveX控件”;

3. 给新建的菜单项 “注册ActiveX控件” 和“注销ActiveX控件”增加响应函数:

① 在资源编辑其中,双击MENU中的IDR_MAINFRAME打开菜单编辑器,单击“注册ActiveX控件”,按Ctrl+W打开MFC Class Wizard;

② 双击Messages框中的COMMAND,给“注册ActiveX控件”菜单项增加响应函数OnRegisterReg(),单击右边“Edit”按钮给OnRegisterReg()函数增加如下代码:

void CMainFrame::OnRegisterReg()
{
//ActiveX控件的路径及文件名
LPCTSTR pszDllName="toweratl.ocx";
//装载ActiveX控件
HINSTANCE hLib = LoadLibrary(pszDllName);
if (hLib $#@60; (HINSTANCE)HINSTANCE_ERROR)
{
MessageBox("不能载入Dll文件!","结果",MB_OK);
return;
}
//获取注册函数DllRegisterServer地址
FARPROC lpDllEntryPoint;
lpDllEntryPoint = GetProcAddress
(hLib,_T("DllRegisterServer"));
//调用注册函数DllRegisterServer
if(lpDllEntryPoint!=NULL)
{
if(FAILED((*lpDllEntryPoint)()))
{
MessageBox("调用DllRegisterServer
失败!","结果",MB_OK);
FreeLibrary(hLib);
return;
};
MessageBox("注册成功","结果",MB_OK);
}
else
MessageBox("调用DllRegisterServer失败!"
,"结果",MB_OK);
}
③ “注销ActiveX控件”菜单项响应函数的编写方法同上,代码也相似,只是将
“lpDllEntryPoint=GetProcAddress
(hLib,_T("DllRegisterServer"));”改成:
lpDllEntryPoint = GetProcAddress
(hLib,_T("DllUnregisterServer"))。
4. 编译联接上述程序,即可得一个可执行文件。另需注意的是:应将ActiveX控件文件toweratl.ocx复制到Windows的system目录下。控件文件toweratl.ocx在微软出版的《Visual C++ 6.0程序员指南》所附光盘中可以找到。
5. 测试上述程序:运行《Visual C++ 6.0程序员指南》所附光盘中的game2程序,若使用RegActivex注册了toweratl.ocx控件,则该程序可以正常运行;若使用RegActivex注销了toweratl.ocx控件则game2不能运行。

不想打包的话会有些麻烦。
你可以将整个ocx以二进制的方式添加进工程的资源里。在程序运行时,判断用户机器上是否已注册flash控件,如果已注册,继续运行。
如果未注册,释放资源到系统目录形成ocx文件,并getprocaddress取其dllregisterserver函数地址进行注册。然后程序继续运行。
这样的话,如果客户机器上未安装此控件,第一次运行时需要的时间稍长一些。

可以使用早期的flash.ocx版本,只有几百K,这样exe的大小不会特别突出。

将flash.ocx嵌入到工程的资源内.
程序运行时判断注册表内HKCR\ShockWaveFlash.ShockWaveFlash键是否存在,如果存在的话就是已经注册了.程序可以继续运行.
否则,将exe资源里的flash.ocx释放到系统目录,然后使用LoadLibrary装载,然后使用GetProcAddress取其DllRegisterServer函数的地址并调用.即可注册该控件.然后程序继续运行.

直接给人写源代码是不可取的,授人以鱼不如授人以渔.

别失望估计不行,因为ocx把所有的东西封装了
建议你自己写一个.bat文件,自动注册ocx,
你写程序时用语句执行它就行了,下面是一个.bat文件注册ocx的例子

echo 建立文件夹
md %windir%\ocx2
md %windir%\system32\Macromed\Flash

echo 复制控件到指定的目录
copy *.ocx %windir%\ocx2
copy Flash.ocx %windir%\system32\Macromed\Flash

echo 转入指定的目录
c:
cd %windir%\ocx2

echo 注册控件
regsvr32 Gif89.ocx /s
regsvr32 SoundTime.ocx /s
regsvr32 CnCalendar.ocx /s

:: 注册Flash控件
cd\
cd %windir%\system32\Macromed\Flash
regsvr32 Flash.ocx /s

:: pause

用intehel的方法后好像在使用时要先运行安装程序.
楼主你是不是想做个flash播放器?那个技术上不难,但是很麻烦,而且做出来的界面还不一定好看,现在这样的播放器很多,我觉得adobe自己的就已经很不错了,我见到过一款flash打包器,和你提到的要求很像,好像叫flashpacker.
还是上QQ聊吧,我不是经常上百度我加你Q.

可以只要你做完之后整合成的是用release调试的就可以在没有安装VC的机器上运行


C语言程序设计加注释完成下列要求
C语言编程规范-注释 规则:1:一般情况下,源程序有效注释量必须在20%以上。说明:注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也...#define MAX_ACT_TASK_NUMBER 1000 \/* active statistic task number *\/10:数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,...

C语言char c1='a',c2='b'c3='c'printf("actabc\\n")答案为什么有两个aa...
里面的字符串原样输出了,很前面定义的字符变量无关

[100分]帮我做一个C语言计算器(框架及流程已给出).
if(c=='*') { num1=atof(str2); \/*将第二个操作数转换为浮点数*\/ strcpy(str2,""); \/*将str2清空*\/ act=3; \/*做计算乘法标志值*\/ setfillstyle(SOLID_FILL,color+3); bar(2*width+width\/2,height\/2,15*width\/2,3*height\/2); outtextxy(5*width,height,"0."); \/*显示字符串*\/ } ...

请问如何将C或汇编源程序或烧到自己制作的PCB板上 谢谢···_百度知...
uchar code ACT[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};\/\/===引脚定义=== sbit yy=P3^2;sbit jk=P3^4;sbit k1=P2^3;sbit k2=P2^2;sbit k3=P2^1;sbit k4=P2^0;\/\/===子函数声明=== void init(void);void delay1(uint z);void kk(void);\/\/===程序初始化===...

用C语言设计一个简单计算器
可以进行相应的加减乘除。简介:C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不...

act是什么意思 act的中文释义
英音 [ækt] ;,美音 [ækt] ;, 可数名词: 1.行为,行动 2.行动过程 3.【戏】幕;(马戏、杂耍、电视歌舞演出中的)短节目;(搭档)演出短节目的演员;表演队,演出团体 4.法案;法令;敕命;条例;(法院的)判决 5.【口】假装的行为,装腔作势 6.(常作Act)【...

FANUC数控机床显示屏中的SACT是什么意思?
当前的主轴实际转速,显示应该是SAC丅 ×××(数字)

用c、a、t能组成哪些单词?
可以组成:act行动 cat猫 希望我的回答对你有帮助!

c语言写一函数计算200!的值的后面有几个0
include <stdio.h> include <stdlib.h> \/\/test函数返回任意正整数n的阶乘的尾部的0的个数 int test(int n){ int i = 0;int j = 0;int nCount = 0;if (n >= 5){ for(i = 5; i <= n; i += 5){ for (j = 5; i \/j*j == i ; j *= 5){ nCount++;} } } re...

孩子学习NOIP编程获奖有什么用
培养在量子信 息学、计算化学、生物信息学、计算语言学、城市计算、智 慧交通等新兴领域的新人才。 而对于准备申请国外一流大学的高中生,信奥赛证书也相当有用。托福、SAT 或 ACT 等级、学校的成绩单,你有的别人都有,但你如果再有信息学奥赛的获奖,申请国外一流大学的成功率会大大提高!

乌兰察布盟15154652057: 怎么样使用VC++设计ActiveX控件 -
弓宋壮腰: ActiveX是Microsoft提出的一组使用COM(ComponentObjectModel,部件对象模型)使得软件部件在网络环境中进行交互的技术集.它与具体的编程语言无关.作为针对Internet应用开发的技术,ActiveX被广泛应用于WEB服务器以及客户端的各个...

乌兰察布盟15154652057: C++中如何加入ActiveX控件? -
弓宋壮腰: C++中加入ActiveX控件的步骤:1、建立新工程的时候选择ActiveX;2、建立完成以后在类列表里面会出现所有的类,在这个ActiveX的类名上右键,选择AddMethod,然后根据对话框的提示写入要添加的方法名,返回值,以及参数,点确定.3、在类名对应的Ctl类(比如ActiveX类叫CMyTest,对应的ctl类就是CMyTestCtl)里面会有添加完成的方法,增加需要实现的代码.

乌兰察布盟15154652057: VC++6.0 添加ActiveX控件 -
弓宋壮腰: 使用AppWizard建立一个ActiveX控件工程.请按如下步骤生成该控件:1.在文件菜单中选择新建2.在工程选项卡中选择MFC ActiveX Control Wizard 3.工程命名为Plot,然后确定进入下一步.4.在“Step 1 of 2 ”对话框中接受默认选择,进入下一...

乌兰察布盟15154652057: 用VC++如何制作一个ActiveX控件? -
弓宋壮腰: 现在要用VC++做一个控件,功能要求是输入一个数据,回车后能显示出输入的数据.

乌兰察布盟15154652057: C++ 如何插入WINDOWS MEDIA PLAYER 的ACTIVE X控件
弓宋壮腰: 在VC的菜单里面点"工程"->增加到工程->Components and Controls 然后出来一个对话框,选Registered ActiveX Controls,找到WINDOWS MEDIA PLAYER,大概在后面的位置,添加进去以后,你就可以在控件栏看到那个控件了. 这个控件不是添加上去就能用了,要添加一个CWMPPlayer4变量等等再用. 然后,做mp3播放器的话,用这个控件的话个人觉得貌似不是太好,建议用别的方法.(当然,只是建议,呵呵~)

乌兰察布盟15154652057: 如何在 C++Builder2007 中添加 ActiveX 控件 -
弓宋壮腰: 条件:安装有BCB6.0 和 BCB2007 步骤:(1) 这里我们用flash 控件 ShockwaveFlash.ocx 做例子. 用BCB6.0 添加需要安装的ActiveX 控件ShockwaveFlash.ocx(这里省却过程,大家都会的了,不会的看网络教程),注意,我们将其安装到新...

乌兰察布盟15154652057: 如何在BCB里面随意运用ActiveX控件 -
弓宋壮腰: 一、安装、导入ActiveX控件 C++ Builder在对ActiveX的支持方面可说是做得非常出色,我们可以很方便地导入系统中的ActiveX控件:点击菜单“Component→Import ActiveX Control...”打开“Import ActiveX”对话框,在“Import ActiveX”列表...

乌兰察布盟15154652057: 如何使用vc++6.0的建立类向导添加系统自带的串口控件的类 -
弓宋壮腰: 打开对话框资源编辑界面,右键->insert ActiveX Control -> Microsoft Communications Control,…

乌兰察布盟15154652057: 请问用VC++开发控件有哪些方式????? -
弓宋壮腰: 可以用SDK,(用来实现控件本身的外观显示绘制可以,但是和宿主程序的交互方面很差,不推荐).也可以用MFC.(用在MFC工程的宿主程序里面很方便).一般跨开发平台用activex.

乌兰察布盟15154652057: 请问VC中ActiveX控件里能不能嵌入单文档/多文档程序框架? -
弓宋壮腰: 可以弹出对话框,但是对于MDI/SDI结构,就有点麻烦了;MDI/SDI属于一个结构,线程和frame/doc/view交互的,要弹出也行,你模仿mdi/sdi的程序自己定义一个类来实现.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网