【IT168 专稿】ActiveX控件和Web页面之间的通信是通过ActiveX控件的属性,方法和事件来完成的。为了演示这些内容,我们需要创建一个带有输入框的页面。当页面上的“提交”按钮被点击后,输入的文本将通过一个输入参数自定义属性传递给ActiveX控件。然后,控件的一个函数将被调用,复制这些文本到一个输出参数自定义属性。
第一篇:步步学ACTIVEX网页控件开发:创建控件
第二篇:步步学ACTIVEX网页控件开发:添加对GIF的支持
第三篇:步步学ACTIVEX网页控件开发:为控件创建网页
第四篇:步步学ACTIVEX网页控件开发:创建安全的ActiveX控件
接着,将触发一个事件,将这些文本显示到页面上。我们将通过下面这些步骤来实现这一ActiveX控件和Web页面之间的通信过程:
1.首先,我们将为ActiveX控件创建自定义属性,用于发送和接收文本。在类视图中,展开MyActiveXLib,然后选择_DMyActiveX。右键单击_DMyActiveX,在上下文菜单中选择“Add”->“Add Property”。在”添加属性向导”对话框中,选择BSTR作为属性类型,然后输入“InputParameter”作为属性的名称。至于对话框中的其它内容,向导将自动为我们生成。最后,点击“Finish”按钮关闭对话框,向导将为我们创建相应的代码。同样地,添加另外一个BSTR类型的属性OutputParameter。
图9 添加属性向导
2.接下来,我们将创建一个方法,使Web页面能够通知控件将文本从输入参数传递到输出参数。在类视图中,展开MyActiveXLib,然后选择_DMyActiveX。右键单击_DMyActiveX,在上下文菜单中选择“Add”->“ Add Method”。在“添加方法向导”对话框中,选择void作为方法的返回类型,输入“LoadParameter”作为方法名,向导会自动地填入“LoadParameter”作为外部名字。点击“Finish”按钮关闭对话框,向导将为我们创建相应的方法代码。
图10 添加方法向导
3.现在,我们将创建一个事件,让ActiveX控件通知Web页面已经完成了文本从输入参数到输出参数的传送。Web页面中的代码将对这个事件做出响应,将输出参数中的文本显示出来以证明传送确实发生了。在类视图中,右键点击CMyActiveXCtrl,然后选择“Add”->“Add Event”。在“添加事件向导”对话框中,输入“ParameterLoaded”作为事件名称,然后将外部名称修改为“FireParameterLoaded”。点击“Finish”按钮关闭对话框,向导将为我们创建相应的代码。
图11 添加事件向导
通过上面这些步骤,向导已经为我们创建了代码的大致框架。我们只需要添加几行代码,完成文本的复制然后通过事件通知Web页面就可以了。编辑文件MyActiveXCtrl.cpp,在函数LoadParameter中添加如下的代码:
m_OutputParameter = m_InputParameter;
// 触发一个事件通知Web页面
FireParameterLoaded();
为了测试ActiveX控件和Web页面之间的通信,使用ActiveX Control Pad创建如下的HTML代码:
<HTML>
<HEAD>
<TITLE>MyActiveX - Methods, Properties, and Events</TITLE>
<SCRIPT LANGUAGE="JavaScript">
function PassParameter()
{
if (StringInput.value != " ")
{
MyActiveX1.InputParameter = StringInput.value;
MyActiveX1.LoadParameter();
}
}
</SCRIPT>
</HEAD>
<BODY>
<center>
MyActiveX - Methods, Properties, and Events Example
<p></p>
<OBJECT ID="MyActiveX1" WIDTH=350 HEIGHT=50
CLASSID="CLSID:36299202-09EF-4ABF-ADB9-47C599DBE778">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="2646">
<PARAM NAME="_ExtentY" VALUE="1323">
<PARAM NAME="_StockProps" VALUE="0">
</OBJECT>
<p></p>
Input Parameter: <INPUT TYPE ="text" NAME="StringInput" VALUE=" ">
<p></p>
<INPUT TYPE="button" NAME="Submit"
VALUE="Submit" ONCLICK=PassParameter()>
<SCRIPT FOR=MyActiveX1 EVENT=ParameterLoaded()>
<!-- {
window.document.write("The parameter you entered is:<br> "
+ MyActiveX1.OutputParameter + " ")
-->
</SCRIPT>
</center>
</BODY>
将上面的页面保存到Web服务器上,然后在IE中打开这个页面。你将看到一个用于输入文本的编辑框和“提交”按钮。在编辑框中输入文本,然后点击“提交”按钮,你将得到一个新的页面,其中显示了你刚刚输入的文本内容。下面,我们来解释一下整个Web页面的工作过程。
当你点击“提交”按钮之后,JavaScript函数PassParameter将被调用。这个函数将文本从编辑框StringInput复制到ActiveX控件的InputParameter属性。然后,它将调用控件的函数LoadParameter,将文本从InputParameter复制到OutputParameter,接着调用FireParameterLoaded产生一个ActiveX控件事件。
下面的HTML代码将负责对这个事件进行处理,通过ActiveX控件的OutputParameter属性访问文本内容,将输入的文本显示到新窗口中。如此,就完成了ActiveX控件和Web页面之间的通信。
<!-- {
window.document.write("The parameter you entered is:<br> " +
MyActiveX1.OutputParameter + " ")
-->
</SCRIPT>