基于VC++中ATL创建ActiveX控件的探讨
2009-06-16 20:07:13 来源:WEB开发网5) 为ActiveX控件添加事件
现在将向ATL控件中添加Click和RClick事件。如果用户在矩形区内点击,则会激发相应事件。现在要向ICircleCtlEvents接口添加Click方法,首先在“ClassView”中选中“ICircleCtlEvents”右击,选择Add Method,出现如下对话框,并按下图设置,最后点“OK”按钮就可以添加Click事件的实现方法。用同样的方法添加RClick事件,参数与Click事件一致。接下来我们要为控件实现连接点接口IConnectionPoint和连接点容器接口IConnectionPointContainer。编译好Circle.idl文件,生成对应的Circle.tlb,在“ClassView”中选中“CCircleCtl”,右击,在Popup菜单中选择“Implement Connection Point”命令,在弹出的对话框中选中“_ICircleCtlEvents”接口。在类中定义了以两个坐标为参数的Fire_Click和Fire_RClick方法,调用这两个方法就可以在控件中激发响应的事件。
最后,添加激发事件的代码,我们分别在鼠标左键和右键按下的消息响应中进行处理,激发响应的事件,例如OnLButtonDown函数部分代码如下:
WORD xPos = LOWORD(lParam); //鼠标水平坐标
WORD yPos = HIWORD(lParam); // 鼠标垂直坐标
Fire_Click (xPos, yPos); //执行触发函数
至此,可以在ActiveX Control Test Container中测试该控件。
网页中使用ActiveX控件
在控件生成时,系统同时生成了一个CircleCtl.htm文件,在VC编辑环境下打开该文件,在和之间加上如下的VBScript:
<SCRIPT LANGUAGE="VBScript">
<!--
Sub CircleCtl_Click(x, y)
If CircleCtl.Radius <100 Then
CircleCtl.Radius = CircleCtl.Radius+1 ‘半径加1
Else
MsgBox(“Radius must be less than 100!”)
End If
End Sub
Sub CircleCtl_RClick(x, y)
If CircleCtl.Radius >=1 Then
CircleCtl.Radius = CircleCtl.Radius-1 ‘半径减1
Else
MsgBox(“Radius mustn’t be less than 0!”)
End If
End Sub
-->
</SCRIPT>
注意保存。然后在“我的电脑”中打开该htm文件,用鼠标单击圆,半径变大,右击圆半径变小。
结束语
本文介绍了基于ATL技术以及使用该技术实现了一个简单的圆的控件CircleCtl并且介绍了其在网页中的使用。ActiveX控件作为可重用的代码组件,不仅应用广泛,还可节约开发时间。它将大量的实现细节隐藏起来,以简明的接口与用户名交互,易于使用。对ActiveX技术的研究已经成为当今软件业的热点和潮流。
更多精彩
赞助商链接