将控件置于网页上(ATL 教程,第 7 部分)
你的控件现已完成。 要查看你的控件在真实情况下的工作情况,请将其放在网页上。 定义控件时会创建一个包含该控件的 HTML 文件。 从解决方案资源管理器中打开 PolyCtl.htm 文件,可以在网页上看到你的控件。
在此步骤中,你将向控件添加功能并编写网页脚本以响应事件。 你还将修改控件以让 Internet Explorer 知道该控件对于脚本是安全的。
添加新功能
要添加控件功能
打开 PolyCtl.cpp 并替换以下代码:
if (PtInRegion(hRgn, xPos, yPos))
Fire_ClickIn(xPos, yPos);
else
Fire_ClickOut(xPos, yPos);
替换为
short temp = m_nSides;
if (PtInRegion(hRgn, xPos, yPos))
{
Fire_ClickIn(xPos, yPos);
put_Sides(++temp);
}
else
{
Fire_ClickOut(xPos, yPos);
put_Sides(--temp);
}
该形状现在将根据你单击的位置添加或删除边。
编写网页脚本
该控件尚未执行任何操作,因此请更改网页以响应你发送的事件。
要编写网页脚本
打开 PolyCtl.htm 并选择 HTML 视图。 将以下行添加到 HTML 代码中。 应将这些添加到
</OBJECT>
的后面,但要在</BODY>
的前面。<SCRIPT LANGUAGE="VBScript"> <!-- Sub PolyCtl_ClickIn(x, y) MsgBox("Clicked (" & x & ", " & y & ") - adding side") End Sub Sub PolyCtl_ClickOut(x, y) MsgBox("Clicked (" & x & ", " & y & ") - removing side") End Sub --> </SCRIPT>
保存 HTM 文件。
你已经添加了一些从控件获取 Sides 属性的 VBScript 代码。 如果在控件内部单击,则会将边数加一。 如果在控件外部单击,则会将边数减一。
指示控件对于脚本是安全的
只能在 Internet Explorer 中查看带有控件的网页。 由于安全漏洞,其他浏览器不再支持 ActiveX 控件。
注意
如果控件不可见,则你要知道,某些浏览器需要调整设置才能运行 ActiveX 控件。 请参阅浏览器的文档,了解如何启用 ActiveX 控件。
根据当前的 Internet Explorer 安全设置,可能会看到“安全警报”对话框。 此对话框告知用户,该控件编写脚本可能不安全,并且可能造成损坏。 例如,如果你有一个显示文件的控件,但同时也有一个删除文件的 Delete
方法,则只有在页面上查看才是安全的。 但是,编写脚本并不安全,因为有人可以调用 Delete
方法。
重要
在本教程中,可以更改 Internet Explorer 中的安全设置,以运行未标记为安全的 ActiveX 控件。 在控制面板中,单击“Internet 属性”,然后单击“安全”以更改相应的设置。 完成本教程后,将安全设置更改回其原始状态。
你可以以编程方式提醒 Internet Explorer,它不需要针对此特定控件显示“安全警报”对话框。 可以使用 IObjectSafety
接口来执行此操作。 ATL 在 IObjectSafetyImpl 类中提供了此接口的实现。 要将接口添加到你的控件,请将 IObjectSafetyImpl
添加到继承类列表中,并在你的 COM 映射中为其添加一个条目。
将 IObjectSafetyImpl 添加到控件
将以下行添加到 PolyCtl.h 中继承类列表的末尾,并在上一行添加逗号:
public IObjectSafetyImpl<CPolyCtl, INTERFACESAFE_FOR_UNTRUSTED_CALLER>
将以下行添加到 PolyCtl.h 中的 COM 映射:
COM_INTERFACE_ENTRY(IObjectSafety)
生成和测试控件
生成控件。 生成完成后,再次在浏览器视图中打开 PolyCtl.htm。 这一次,应该会直接显示网页,不会出现“安全警报”对话框。 如果单击多边形内部,则边数加一。 如果单击多边形外部,则边数减一。
后续步骤
完成此步骤后,ATL 教程便结束。 有关 ATL 更多信息的链接,请参阅 ATL 起始页。