VBScript/JScript和ActiveX的双向交互

一、怎么使用ATL做Activex?

这个问题,我问了很多COM高手,都是笑而不言。最后,我采用了最笨也最实在的做法,找MSDN。我发现,我找到了最好的路径。MSDN(2004)上 VC.NET-->VC++--> 添加功能-->VC库-->ATL-->ATL教程。这个什么都说明了。好好练习。MFC也是这样去熟悉吧。

二、VBScript/JScript和ActiveX交互

通过ATL教材,我们可以得到一个绘制多边形的Activex,这个控件有能让IE得到两个事件ClickIn和ClickOut。

 [
  uuid(F9040106-F2F3-417E-92B0-2D58E4E83C6B),
  helpstring("_IPolyCtrl事件接口")
 ]
 dispinterface _IPolyCtrlEvents
 {
  properties:
  methods:
        [id(1), helpstring("方法ClickIn")] void ClickIn([in] LONG x, [in] LONG y);
        [id(2), helpstring("方法ClickOut")] void ClickOut([in] LONG x, [in] LONG y);
    };

例子并提供了和VBScript的交互代码,如下:

<SCRIPT LANGUAGE="VBScript">
<!--
Sub PolyCtl_ClickIn(x, y)  --》得到activex的参数,由ActiveX来触发
   PolyCtl.Sides = PolyCtl.Sides + 1--》调用ActiveX的属性,由Script触发
End Sub
Sub PolyCtl_ClickOut(x, y)
   PolyCtl.Sides = PolyCtl.Sides - 1
End Sub
-->
<HTML>
<HEAD>
<TITLE>ATL 3.0 test page for object PolyCtl</TITLE>
</HEAD>
<BODY>
<OBJECT ID="PolyCtl" <
 CLASSID="CLSID:4CBBC676-507F-11D0-B98B-000000000000">
>
</OBJECT>
</SCRIPT>
</BODY>
</HTML>

俺对VBScrpit的古怪语法不爽,如:控件名字_事件名字(参数1,参数2...)并语句后面没有“;”,所以,改为JScript,如下:

<script language=javascript for=PolyCtrl event=ClickIn(x,y)>--》得到activex的参数,由ActiveX来触发
<!--
window.alert("ClickIn"+" x="+x+" y="+y);
PolyCtrl.Sides=PolyCtrl.Sides+1;--》调用ActiveX的属性,由Script触发
//-->
</script>

<script language=javascript for=PolyCtrl event=ClickOut(x,y)>
<!--
window.alert("ClickOut"+" x="+x+" y="+y);
PolyCtrl.Sides=PolyCtrl.Sides-1;
//-->
</script>

<HTML>
<HEAD>
<TITLE>ATL 3.0 test page for object PolyCtl</TITLE>
</HEAD>
<BODY>
<OBJECT ID="PolyCtl" <
 CLASSID="CLSID:4CBBC676-507F-11D0-B98B-000000000000">
>
</OBJECT>
</SCRIPT>
</BODY>
</HTML>

你可能感兴趣的:(VBScript/JScript和ActiveX的双向交互)