一、怎么使用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>