ActiveX控件的属性,方法和事件
ActiveX控件和Web页面之间的通信是通过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 >
原文:http://blog.sina.com.cn/s/blog_561a69f10100gas8.html