有关在vc中编写activex控件的问题,求助!

时间:2021-04-22 21:03:57
我用向导创建了一个mfc的activex控件工程,vc为我自动生成了一个对话框,我简单的放了一个按钮在上面,点击的时候会显示“hello”的信息,很简单的我只是想测试一下。

然后我就编译,结果生成一个ocx文件,请问我如何能够将这个ocx文件放在ie浏览器中使用呢?

因为我以前用vb,vb自带一个打包的向导,很好用的,打包完后就会自动生成一个cab文件,并且有一个html文件,里面有如何在网页用饮用这个控件的html代码,拷贝到我的网页中就可以了,十分方便。

现在因为工作需要要用vc写一个activex控件。

另外,如果我在网页中这样使用控件:
<OBJECT ID="MyActiveX1" WIDTH=500 HEIGHT=200
 CLASSID="CLSID:6AA850BF-9125-4558-B44D-2CA1C7C2EA62">
    <PARAM NAME="_Version" VALUE="65536">
    <PARAM NAME="_ExtentX" VALUE="2646">
    <PARAM NAME="_ExtentY" VALUE="1323">
    <PARAM NAME="_StockProps" VALUE="0">
</OBJECT>
那些PARAAM的值如何在控件中获得?我只知道在vb中可以通过“propertybag”获得,但是在vc中就不知道了。

最后,如何在控件中访问ie浏览器中的对象,例如获得/设置一个文本框的值?

5 个解决方案

#1


1 打包的向导Visual Interdev里面也有
2 COleControl::DoPropExchange

#2


参考:
++++++++++++++++++++++++++++
怎样在网页中调用OCX控件中的方法???? 
http://community.csdn.net/Expert/topic/4918/4918486.xml?temp=.5061762

#3


http://support.microsoft.com/kb/159923/zh-cn

#4


除了用工具,也可以自己动手,和发布dll一样:
++++++++++++++++++++++++++++++++++++++++++++++++
在网上发布需要将依赖的文件打包为.cab,其中包括组件的dll,dll依赖的库和一个inf文件。我的示例中inf 文件的内容如下:

[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[Add.Code]
zqcom.dll=zqcom.dll
msvcr71d.dll=msvcr71d.dll
[zqcom.dll]
file-win32-x86=thiscab
clsid={CB4C551D-2BF5-40F7-866B-922DBEA618F2}
FileVersion=1,0,0,0
RegisterServer=yes
[msvcr71d.dll]
file-win32-x86=thiscab
RegisterServer=yes
  其中[version]的内容固定;[Add.Code]为要添加的内容,zqcom.dll为要添加的组件,msvcr71d.dll为zqcom.dll 的依赖库,(我用的是.net,因此是msvcr71d.dll,若用vc6.0写的组件就是mfc42.dll);[zqcom.dll]中是一些信息,clsid对应的是类的CLSID。
注意:由于组件未签名,客户端访问的时候要降低安全设置,在属性安全中把internet和intranet的设置改为允许运行未签名的activex组件就ok了,安装后再该回来。

打包.cab的方法:

在命令行输入:

CABARC n e:\myinf.cab e:\zqcom.dll e:\msvcr71d.dll e:\test.inf
  把生成的.cab放在对应的位置,我的cab放在:c:\Inetpub\wwwroot\下。若cabarc未运行,那就在机器上搜一下,然后加入环境路径中,一切ok了。

#5


我用PackageForTheWeb将ocx大包成cab。

我知道用了《OBJECT》标记可以在网页中加入控件,但是其中的那个classid如何获得?

我到注册表里面根据我的控件的名字查找了一下,找到两个,一个是propertypage另外一个是控件的classid,然后我将控件的那个classid拷贝过来,放在页面上:

<OBJECT ID="test" classid="C470F9CD-2B95-43A0-8E4D-600B7964A5E7" CODEBASE="/test.CAB#version=1,0,0,2" width="200" height="100">
</OBJECT>

不过当我打开ie的时候,却发现页面上只有一个类似文本框的东西(我在“ActiveX control test container”里面看见是有一个椭圆图案的,因为vc缺省生成的控件OnDraw那里就是画了一个椭圆)

而且我在控件的构造函数里面添加了一句MessageBox,按理说打开ie页面的时候就会马上显示这个MessageBox,但实际上什么都没有(用“ActiveX control test container”加载控件就会有!)

#1


1 打包的向导Visual Interdev里面也有
2 COleControl::DoPropExchange

#2


参考:
++++++++++++++++++++++++++++
怎样在网页中调用OCX控件中的方法???? 
http://community.csdn.net/Expert/topic/4918/4918486.xml?temp=.5061762

#3


http://support.microsoft.com/kb/159923/zh-cn

#4


除了用工具,也可以自己动手,和发布dll一样:
++++++++++++++++++++++++++++++++++++++++++++++++
在网上发布需要将依赖的文件打包为.cab,其中包括组件的dll,dll依赖的库和一个inf文件。我的示例中inf 文件的内容如下:

[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[Add.Code]
zqcom.dll=zqcom.dll
msvcr71d.dll=msvcr71d.dll
[zqcom.dll]
file-win32-x86=thiscab
clsid={CB4C551D-2BF5-40F7-866B-922DBEA618F2}
FileVersion=1,0,0,0
RegisterServer=yes
[msvcr71d.dll]
file-win32-x86=thiscab
RegisterServer=yes
  其中[version]的内容固定;[Add.Code]为要添加的内容,zqcom.dll为要添加的组件,msvcr71d.dll为zqcom.dll 的依赖库,(我用的是.net,因此是msvcr71d.dll,若用vc6.0写的组件就是mfc42.dll);[zqcom.dll]中是一些信息,clsid对应的是类的CLSID。
注意:由于组件未签名,客户端访问的时候要降低安全设置,在属性安全中把internet和intranet的设置改为允许运行未签名的activex组件就ok了,安装后再该回来。

打包.cab的方法:

在命令行输入:

CABARC n e:\myinf.cab e:\zqcom.dll e:\msvcr71d.dll e:\test.inf
  把生成的.cab放在对应的位置,我的cab放在:c:\Inetpub\wwwroot\下。若cabarc未运行,那就在机器上搜一下,然后加入环境路径中,一切ok了。

#5


我用PackageForTheWeb将ocx大包成cab。

我知道用了《OBJECT》标记可以在网页中加入控件,但是其中的那个classid如何获得?

我到注册表里面根据我的控件的名字查找了一下,找到两个,一个是propertypage另外一个是控件的classid,然后我将控件的那个classid拷贝过来,放在页面上:

<OBJECT ID="test" classid="C470F9CD-2B95-43A0-8E4D-600B7964A5E7" CODEBASE="/test.CAB#version=1,0,0,2" width="200" height="100">
</OBJECT>

不过当我打开ie的时候,却发现页面上只有一个类似文本框的东西(我在“ActiveX control test container”里面看见是有一个椭圆图案的,因为vc缺省生成的控件OnDraw那里就是画了一个椭圆)

而且我在控件的构造函数里面添加了一句MessageBox,按理说打开ie页面的时候就会马上显示这个MessageBox,但实际上什么都没有(用“ActiveX control test container”加载控件就会有!)