大多数 DHTML 控件代码与为任何 ATL 控件创建的代码完全相同。 为了对泛型代码有一个基本的了解,请完成 ATL 教程的学习,并阅读创建 ATL 项目和 ATL COM 对象基础知识部分。
DHTML 控件与任何 ATL 控件都是类似的,但以下方面除外:
除了控件实现的常规接口外,它还实现了一个附加接口,用于在 C++ 代码与 HTML 用户界面 (UI) 之间通信。 HTML UI 使用此接口调用 C++ 代码。
它为控件 UI 创建 HTML 资源。
它允许通过成员变量
m_spBrowser访问 DHTML 对象模型,这是一个 IWebBrowser2 类型的智能指针。 使用此指针可以访问 DHTML 对象模型的任何部分。
下图说明了 DLL、DHTML 控件、Web 浏览器和 HTML 资源之间的关系。
注意
此图上的名称都是占位符。 HTML 资源名称和控件上公开的接口均基于你在 ATL 控件向导中为其分配的名称。
在此图中,元素如下:
我的 DLL:使用 ATL 项目向导创建的 DLL。
DHTML 控件 (
m_spBrowser):使用 ATL 对象向导创建的 DHTML 控件。 此控件通过 Web 浏览器对象的接口IWebBrowser2访问 Web 浏览器对象及其方法。 除了控件所需的其他标准接口之外,控件本身还公开了以下两个接口。IDHCTL1:控件公开的接口,仅供容器使用。IDHCTLUI1:用于在 C++ 代码和 HTML 用户界面之间通信的调度接口。 Web 浏览器使用控件的调度接口来显示控件。 可以通过调用window.external,再加上你想调用的这个调度接口的方法名称,从控件的用户界面调用此调度接口的各种方法。 可以通过构成此控件 UI 的 HTML 中的 SCRIPT 标记访问window.external。 有关在资源文件中调用外部方法的详细信息,请参阅从 DHTML 调用 C++ 代码。
IDR_CTL1:HTML 资源的资源 ID。 在本例中,它的文件名是 DHCTL1UI.htm。 DHTML 控件使用 HTML 资源,其中包含标准的 HTML 标记和外部窗口调度命令,你可以使用文本编辑器进行编辑。
Web 浏览器:Web 浏览器根据 HTML 资源中的 HTML 来显示控件 UI。 指向 Web 浏览器
IWebBrowser2接口的指针在 DHTML 控件中可用,以允许访问 DHTML 对象模型。
ATL 控件向导生成的控件在 HTML 资源和 .cpp 文件中都带有默认代码。 你可以编译并运行向导生成的控件,然后在 Web 浏览器或 ActiveX 控件测试容器中查看控件。 下图显示了默认的 ATL DHTML 控件,其中有三个按钮显示在测试容器中:
请参阅创建 ATL DHTML 控件,开始生成 DHTML 控件。 请参阅使用测试容器测试属性和事件,了解有关如何访问测试容器的信息。