1 / 17
文档名称:

ATL.docx

格式:docx   大小:377KB   页数:17页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

ATL.docx

上传人:cby201601 2018/1/11 文件大小:377 KB

下载得到文件列表

ATL.docx

文档介绍

文档介绍:第六部分- 掌控 ActiveX 控件
下载示例工程- KB
内容
简介
以 AppWizard 开始
创建工程
生成的代码
使用资源编辑器添加控件
用于掌控控件的 ATL 类
CAxDialogImpl
AtlAxWin 和 CAxWindow
调用控件的方法
接收控件激发的事件
在 VC 6 里添加处理器
在 VC 7 里添加处理器
事件的知会
VC 6 里的知会
VC 7 里的知会
示例工程概述
运行时创建 ActiveX 控件
键盘处理
下一步
修订历史
简介
在这第六部分里,我将介绍 ATL 对在对话框中掌控(hosting)ActiveX 控件的支持。由于 ActiveX 控件是 ATL 的专项,所以这儿并没有相关的 WTL 类。不过,因为 ATL 掌控控件的方式与 MFC 迥异,所以这是我们要介绍的一个重要主题。我会介绍如何掌控控件以及接收(sink)事件,并开发一个相比用 MFC 的 ClassWizard 写就的应用毫无功能损失的应用程序。当然,你可以在你写的 WTL 应用中使用 ATL 对控件掌控的支持。
本文的示例工程演示了如何掌控 IE 的 Web 浏览器控件。我选择浏览器控件是基于以下两个不错的理由:
每个人的机器上都有它,而且
它有很多方法并会激发(fire)很多事件,因此用于演示目的,它是确是个很好的控件。
我肯定比不上那些花了很多时间使用 IE 的 Web 浏览器控件编写定制浏览器的人们。但是,通读本文之后,你就会有足够的知识开始编写你自己的定制浏览器了!
以 AppWizard 开始
创建工程
WTL 的 AppWizard 可以为我们创建马上就能掌控 ActiveX 控件的应用。下面我们要创建一个称为 IEHoster 的新工程。像上一章一样,我们要使用一个非模态对话框,只不过这次要把 Enable ActiveX Control Hosting 复选框选中,就象这样:
选中这个复选框会使得我们的主对话框从 CAxDialogImpl 中派生,因此能够掌控 ActiveX 控件。在 VC 6 的向导里,在第二页上还有另外一个复选框,其文字为 Host ActiveX Controls,但是选中它对结果代码没有任何影响,所以在第一页里就可以点击 Finish 按钮完成了。
生成的代码
在这一节里,我会先介绍一些原来没有见过的由 AppWizard 生成的代码片断;下一节里,我再详细介绍 ActiveX 掌控类。
第一个需要检视的文件是 ,其中的包含文件有:
#include <>
#include <>

extern CAppModule _Module;

#include <.h>
#include <>
#include <>
#include <>
// .. other WTL headers ...
.h 和 相对重要。相关的类(omPtr),以及用来掌控控件的窗口类。
接下来,再看 中 CMainDlg 的声明:
class CMainDlg : public CAxDialogImpl<CMainDlg>,
public CUpdateUI<CMainDlg>,
public CMessageFilter, public CIdleHandler
CMainDlg 现在是派生于 CAxDialogImpl,后者是使对话框能够掌控 ActiveX 控件的第一步。
最后,是 WinMain() 中的一行新代码:
int WINAPI _tWinMain(...)
{
//...
(NULL, hInstance);

AtlAxWinInit();

int nRet = Run(lpstrCmdLine, nCmdShow);

();
return nRet;
}
AtlAxWinInit() 注册了一个名为 AtlAxWin 的窗口类。该类在 ATL 为 ActiveX 控件创建宿主窗口时使用。
由于 ATL 7 的一个改动,你必须给 () 传递一个 LIBID。论坛中的一些人建议在 VC 7 中使用如下代码:
(NULL, hInstance, &LIBID_ATLLib);
这个改动在我这儿工作的很好。
使用资源编辑器添加控件
ATL 允许你象在 MFC 应用中一样