概述
ATL
ATL本来是为了写COM组件(ActiveX、OLE)而生的,顺带提供了最基础的窗口能力
WTL
WTL是微软的一个团队后来单独发布的头文件库,专门填充ATL在UI方向的空白
关系
wtl是工具箱,不是框架
|
1 2 3 4 5 6 |
Win32 API 原始 C 接口,什么都要手写 ↓ ATL 给 COM 用的 C++ 模板封装,提供 CComPtr / IDispatch 等 ↓ WTL 在 ATL 之上扩展,专门负责 UI 部分 把 HWND / HDC / 消息路由 封装成 C++ 模板类 |
|
1 2 |
ATL = COM 基础设施 + 最基础的 Win32 窗口支持 WTL = 在 ATL 之上补全 UI 部分 |
ATL
概述
- 下面这些文件,
WTL依赖这些文件,但不包含它们 - 安装
Visual Studio时它们就已经在了
位置
|
1 |
c:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\atlmfc\include\ |
atlbase
ATL核心CComPtrCAtlModuleCOM基础
atlwin
ATL窗口基类CWindowCWindowImplBEGIN_MSG_MAP
atlstr
ATL字符串CAtlString
atlcom
COM接口实现辅助
atlctl
ATL ActiveX控件支持
atlsync
ATL线程同步CMutexCEventCCriticalSection
atltypes
ATL几何类型CPointCSizeCRect(ATL版本)
WTL
下载
模块划分
- 核心模块
atlapp.hatlcrack.hatlmisc.hatlres.h
- 窗口、控件
atlframe.hatldlgs.hatlctrls.hatlgdi.hatlscrl.hatlsplit.h
- 扩展功能
atlddx.hatlctrlw.hatlctrlx.hatltheme.hatldwm.hatlfind.h
- 工具
atlprint.hatlribbon.hatluser.hatlwinx.h
atlapp
CAppModuleWTL应用的全局模块,替代ATL的CAtlExeModuleT,管理消息循环线程映射
CMessageLoop- 消息泵主体,内部是
GetMessage/TranslateMessage/DispatchMessage循环
- 消息泵主体,内部是
CMessageFilter- 接口,在消息进入分发前拦截(实现快捷键、
Tab焦点等)
- 接口,在消息进入分发前拦截(实现快捷键、
CIdleHandler- 接口,消息队列为空时回调(适合后台任务、动画帧驱动)
atlcrack
- 提供
MSG_WM_系列宏,替代MESSAGE_HANDLER,自动把WPARAM/LPARAM裂解成有意义的参数- 例:
MSG_WM_SIZE(OnSize) → OnSize(UINT type, CSize size)直接拿到尺寸,不需要手写LOWORD(lParam)
- 例:
- 覆盖所有
WM_*消息,是写消息处理函数最省力的方式
atlmisc
CString WTL版轻量字符串(不依赖MFC),支持格式化、查找、替换CRect/CPoint/CSize几何类(WTL版,比ATL版多一些便利方法)CRecentDocumentList最近文件列表,自动管理注册表存储RunTimeHelper运行时Windows版本检测工具函数
atlres
- 定义
WTL内部使用的标准资源ID常量 ID_FILE_NEW / ID_FILE_OPEN / ID_FILE_SAVE等菜单命令IDATL_IDS_*标准字符串资源ID(状态栏提示等)- 你的项目只要用
WTL的框架窗口,就必须包含这个文件
atlframe
CFrameWindowImpl<T>应用主窗口基类,内置工具栏/状态栏停靠区域管理和客户区自动填充CMDIFrameWindowImpl<T>MDI主窗口(多文档界面)CMDIChildWindowImpl<T>MDI子窗口CUpdateUI<T>菜单项/工具栏按钮状态自动更新机制(启用/禁用/选中)COwnerDraw<T>自绘控件辅助,简化WM_DRAWITEM处理
atldlgs
CDialogImpl<T>- 模态/非模态对话框基类(基于
.rc资源)
- 模态/非模态对话框基类(基于
CSimpleDialog<t,modal>- 只有
OK/Cancel的简单对话框,无需派生
- 只有
CPropertyPageImpl<T>- 属性页(
Wizard单页)
- 属性页(
CPropertySheetImpl<T>- 属性表容器(多页
Tab对话框)
- 属性表容器(多页
- 系统通用对话框封装:
CFileDialogCFontDialogCColorDialogCPrintDialogCFolderDialog
atlctrls
- 封装全部
Win32 Common Controls,每个控件方法对应一条SendMessage
- 基础控件:
CButtonCEditCListBoxCComboBoxCStatic
- 列表类:
CListViewCtrlCTreeViewCtrlCHeaderCtrl
- 工具类:
CToolBarCtrlCStatusBarCtrlCTabCtrlCToolTipCtrl
- 输入类:
CProgressBarCtrlCSliderCtrlCSpinButtonCtrlCHotKeyCtrl
- 日期类:
CDateTimePickerCtrlCMonthCalendarCtrl
atlgdi
DC类(与Skia集成的接缝):CPaintDCWM_PAINT专用,析构自动EndPaintCClientDC客户区DCCWindowDC整窗口含非客户区CMemDC内存DC双缓冲
GDI对象:CFontCPenCBrushCBitmapCRgnCPalette,均支持RAII自动释放
CDC通用DC基类,封装SelectObject/RestoreObject
atlscrl
CScrollWindowImpl<T>为普通窗口添加滚动条支持,自动处理WM_HSCROLLWM_VSCROLLWM_MOUSEWHEEL
CScrollImpl<T>Mixin形式,可叠加到任意窗口类
CScrollContainer- 可滚动的子窗口容器
- 自动计算滚动范围、处理键盘滚动(
Page Up/Down/Home/End)
atlsplit
CSplitterWindow- 水平或垂直分割两个子窗口,支持拖动分割线
CSplitterWindowImpl<T>- 可派生版本,自定义分割线外观
- 支持固定比例、最小尺寸限制、单侧固定模式
- 典型用途:
- 左侧树形目录 + 右侧内容区
atlddx
Dialog Data eXchange- 在控件和变量之间自动同步数据
|
1 2 3 |
DDX_TEXT(IDC_EDIT, m_str) 文本框 ↔ CString DDX_INT / DDX_FLOAT 数值输入框 ↔ 整数/浮点 DDX_CHECK / DDX_RADIO 复选框/单选框 ↔ bool/int |
- 在
DoDataExchange()里写一次,DoModal前后自动读写,免去GetDlgItemText调用
atlctrlw
CCommandBarCtrl- 可在工具栏里嵌入菜单的控件,类似
PocketPC/早期Windows Mobile风格
支持位图按钮、下拉菜单按钮、分隔符
- 可在工具栏里嵌入菜单的控件,类似
- 与
CFrameWindowImpl配合,替代传统菜单栏,实现工具栏和菜单合一的界面
atlctrlx
CBitmapButton- 用位图替代文字的按钮,支持四态图(普通/悬停/按下/禁用)
CCheckListViewCtrl- 带复选框的
ListView
- 带复选框的
CHyperLink- 超链接控件,点击打开
URL
- 超链接控件,点击打开
CWaitCursorRAII等待光标,构造时变沙漏,析构时恢复
CCustomDraw<T>- 自定义绘制(
NM_CUSTOMDRAW)辅助Mixin
- 自定义绘制(
atltheme
- 封装
Windows UxTheme API(uxtheme.dll),用于绘制与系统视觉样式一致的控件 CTheme- 主题句柄封装,
OpenThemeData/CloseThemeData自动管理
- 主题句柄封装,
CThemeImpl<T>Mixin,给窗口类添加主题感知能力
- 用于自绘控件时保持与
Windows Aero/Fluent主题视觉一致
atldwm
- 封装
Desktop Window Man1agerAPI(dwmapi.dll) CDwm DWM操作集合- 毛玻璃/
Acrylic背景:DwmEnableBlurBehindWindow / DwmExtendFrameIntoClientArea
- 缩略图预览:
DwmRegisterThumbnail(任务栏预览)
- 窗口属性:
- 圆角模式、边框颜色(
Windows 11)
- 圆角模式、边框颜色(
- 异形透明窗口的必用模块
atlfind
CEditFindReplaceImpl<T>Mixin,给CEdit或RichEdit添加查找/替换功能
- 内置"查找"和"替换"对话框(系统通用对话框)
- 处理
FINDMSGSTRING注册消息,实现高亮匹配、全部替换等操作 - 文本编辑器类应用直接拿来用
atlprint
CPrinter- 打印机句柄封装
CPrinterDC- 打印机
DC,类似CPaintDC但输出到打印机
- 打印机
CDevMode- 打印机设置(纸张/方向/质量)
CPrintPreviewWindow- 打印预览窗口
CZoomScrollImpl<T>- 带缩放的滚动视图,打印预览的基础组件
atlribbon
- 封装
Windows Ribbon Framework(Win7+系统功能) CRibbonImpl<T>Ribbon宿主Mixin,加到框架窗口类上
CRibbonUpdateUI<T>- 替代
CUpdateUI,专门用于Ribbon控件状态更新
- 替代
Ribbon的布局在XML资源(.ribbon文件)里定义,通过Windows API渲染Office 2010+风格界面的实现基础
atluser
- 封装
Win32用户界面对象句柄,提供RAII自动释放 CIcon HICON- 封装,加载/销毁图标
CCursor HCURSOR- 封装,加载/设置光标
CAccelerator HACCEL- 封装,键盘快捷键表
CMenu HMENU- 封装(比
atlctrls.h里的更基础的版本)
- 封装(比
atlwinx
- 对
ATL CWindow的功能补充,添加WTL没有其他地方放的窗口工具函数 CWindowEx- 在
CWindow基础上增加额外便利方法
- 在
- 滚动相关工具函数(
GetScrollPos封装) - 窗口枚举辅助(子窗口遍历)
- 一些跨版本兼容的
API包装
声明:本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Windows线程同步相关03/10
- ♥ C++14_第一篇12/14
- ♥ C++标准模板库编程实战_智能指针11/30
- ♥ Windows 核心编程 _ 线程优先级与关联性07/09
- ♥ Windows机制:物理内存、虚拟内存03/28
- ♥ Boost 程序库完全开发指南:工具与字符串08/22