这门课解决什么实际问题

ATL 是 Windows 平台上开发轻量级 COM 组件和 ActiveX 控件的核心工具库。对于掌握 Windows 编程基础的开发者而言,直接阅读 ATL 源码或尝试封装复杂组件时,往往会被其庞大的模板元编程和接口继承体系劝退。本课程聚焦于 ATL 的内部实现原理,旨在打通从“理解 COM 规范”到“独立编写高质量组件”之间的技术壁垒。

课程并未停留在 API 调用的表层,而是深入剖析了持久化存储、枚举器设计、连接点事件分发、窗口消息映射以及属性页管理等关键机制。这些是开发复杂 COM 对象和 OCX 控件时必须面对的核心难点。如果你希望在不依赖重型框架(如 MFC)的情况下,精确控制组件内存布局、接口查询行为及跨进程通信效率,这门课提供了必要的底层视角。

适合什么基础,建议先看哪几块

本课程预设读者已完成 Windows 编程基础、Windows 核心编程、Windows 网络编程的学习,并具备扎实的 COM 组件原理知识。这意味着你需要熟悉 HRESULT 错误处理、IID 查询、引用计数以及接口定义语言(IDL)的基本概念。若缺乏 COM 基础,直接学习 ATL 内部构架会因概念重叠过多而难以消化。

建议初学者按以下顺序投入精力:首先攻克“永久存储”章节,这是理解 ATL 如何将复杂对象序列化到注册表或流中的基础,其中“自己实现一个永久存储”的环节能有效建立对 IPropertyBag 和 IPersistStream 接口的直观认识。其次关注“枚举器原理”与“连接点实现原理”,前者涉及集合对象的通用模式,后者则是事件驱动编程的核心。最后结合“窗口和对话框”及“控件实现原理”章节,将理论落地到具体的 UI 组件开发中。

学完能做什么,资料如何配合练习

学完本课后,读者应能独立使用 ATL 编写符合 COM 标准的组件,包括简单的单接口对象、带事件源的 ActiveX 控件以及多页面属性页组件。你将能够解析并修改 ATL 生成的桩代码,根据业务需求优化接口实现,而非仅能做简单的封装调用。

资料部分虽未提供完整的目录列表,但结合课程时长与主题,练习建议采用“对照源码+手写复现”的方式。在观看永久存储和枚举器原理的讲解时,尝试不依赖 ATL 宏,手动实现对应的接口继承和方法调用,以验证对虚函数表和 GUID 布局的理解。对于连接点和控件部分,建议搭建最小化的测试宿主环境,观察事件触发与窗口消息的传递路径,从而真正内化 ATL 的架构思想。

课程目录

QQ_1790992288202.png (155.

46 KB,  ) 4 天前 上传 适合人群: 完成windows编程基础,windows核心编程,windows网络编程,以及COM组件原理的同学,并且希望能够用ATL开发控件的同学。 你将会学到: 讲解ATL内部构架和内部代码的实现原理。 课程简介: 讲解了ATL内部构架,内部代码的实现原理。是的用户能够灵活使用ATL编写自己的组件。 ATL永久存储原理 ATL的列举器原理 ATL连接点实现原理 ATL中的窗口和对话框 ATL属性页原理 ATL控件实现原理 第1章永久存储(4小时27分钟5节) 1-1永久存储简介[55:16] 1-2自己实现一个永久存储[36:27] 1-3ATL实现永久存储的原理一[01:12:30] 1-4ATL实现永久存储原理二[55:28] 1-5Marshal As Value[47:55] 第2章ATL列举器(4小时1分钟9节) 2-1ATL实现IEnumXXX举例[34:41] 2-2CComEnum[45:38] 2-3CComEnum另外两种列举方法举例[13:19] 2-4列举顺序容器vector的非拷贝形式[26:04] 2-5自带拷贝和类型转换的列举[17:28] 2-6即用即创建的顺序容器[22:33] 2-7容器接口[19:54] 2-8垫片类CAdaptor[19:33] 2-9Atl提供的几个容器类[42:44] 第3章连接点(4小时24分钟6节) 3-1连接点[59:45] 3-2连接点的实现例子[47:00] 3-3在DLL中制作接受连接点事件的对象[49:16] 3-4接受连接点事件对象内部实现原理[59:52] 3-5使用实例[29:42] 3-6IProviderClassInfo2[18:25] 第4章 窗口和对话框 (11小时49分钟 18节) 4-1ATL中的windows窗口程序[38:43] 4-2SupClass[17:45] 4-3把一个窗口的所有东西做到一个类中(一)[51:08] 4-4把一个窗口放到一个类中(二)[01:09:20] 4-5SupClass和ATL[27:59] 4-6ATL中窗口类的注册[52:20] 4-7设置窗口类类型以及窗口类型和扩展类型[53:41] 4-8窗口消息处理过程[54:39] 4-9ATL窗口消息处理宏用法[12:13] 4-10ATL窗口消息处理宏结构[11:18] 4-11Command和Notify消息[23:55] 4-12消息反弹技术[01:06:30] 4-13消息上推技术[36:20] 4-14消息链条和消息分类[36:45] 4-15动态消息链[29:51] 4-16对话框程序[38:36] 4-17CContainedWindow中的SuperCla[53:24] 4-18SubClass技术[34:52] 第5章 属性页 (1小时8分钟 1节) 5-1属性页的原理[01:08:56] 6-1属性页的原理[01:08:56] 第6章 控件 (18小时32分钟 22节) 6-2控件概述[34:10] 6-3容器侧规则一[55:02] 6-4容器侧规则二[24:18] 6-5控件规则一[53:54] 6-6控件规则二[01:00:57] 6-7阅读代码环境的搭建[30:09] 6-8IOleObject在ATL中的实现一[01:01:14] 6-9IOleObject在ATL中的实现二[45:02] 6-10控件是如何被激活的[55:22] 6-11控件的显示-有窗口(WM_PAINT)[32:46] 6-12IViewObject和无窗口控件的视图[01:07:25] 6-13控件侧的其他接口的实现[01:27:28] 6-14控件中的IPropertyNotifySink接口以[01:03:56] 6-15容器侧如何激活控件一[01:01:17] 6-16容器侧如何激活控件二[41:41] 6-17容器侧Control Site的实现一[43:31] 6-18容器侧ControlSite接口实现二[40:29] 6-19容器侧的ControlSite接口实现三[48:44] 6-20ATL对话框上的控件[35:08] 6-21如何用带控件的对话框模板来创建对话框[48:58] 6-22复合控件和DHTML控件