【整理】Win32编程中的ATL常用类
acmilan2015/08/15软件综合 IP:四川
ATL除了是一个编写COM组件和ActiveX控件的方法之外,还是一个十分有用的Win32、COM应用程序工具库,ATL中很多类在普通应用程序中使用,可大大提高编写Win32应用程序的效率。

一、普通字符串(和MFC共享,但不需要MFC支持)
<code class="lang-text">CString                  普通字符串(ANSI或Unicode字符集)
CStringA                 普通字符串(ANSI字符集)
CStringW                 普通字符串(Unicode字符集)</code>

二、图像加载和显示(和MFC共享,但不需要MFC支持)
<code class="lang-text">CImage                   图像加载和显示(支持JPG、GIF和PNG)</code>

三、Win32系统服务类
<code class="lang-text">CAtlFile                 文件操作
CAtlFileMapping          文件映射操作
CRegKey                  注册表操作</code>

四、路径和URL分析
<code class="lang-text">CPath[A/W]               路径分析
CUrl                     URL分析</code>

五、Visual Basic 类型(应用于IDispatch接口)
<code class="lang-text">CComBSTR                 Visual Basic 计数式字符串(Unicode字符集)(注意:可能含有多个0)
CComVariant              Visual Basic 可变类型
CComSafeArray<t>         Visual Basic 数组
CComSafeArrayBound       Visual Basic 数组边界
CAdapt<t>                将VB类型适配为标准C++类型(屏蔽&操作符,主要用于C++集合类)</t></t></code>

六、COM接口智能指针(具有自动QueryInterface/AddRef/Release等功能)
<code class="lang-text">CComPtr<t>               通用COM接口指针(现在的版本也实现了QueryInterface)
CComQIPtr<t>             通用COM接口指针(实现了QueryInterface的老版本,不能用于IUnknown和NULL)
CComGITPtr<t>            全局接口表(GIT)COM接口指针</t></t></t></code>

七、C++智能指针
<code class="lang-text">CAutoPtr<t>               C++智能指针(new、delete运算符)
CAutoVectorPtr<t>         C++数组智能指针(new[]、delete[]运算符)</t></t></code>

八、内存管理
<code class="lang-text">IAtlMemMgr               通用内存管理接口
CComHeap                 COM堆内存管理(CoTaskMemAlloc、CoTaskMemFree等)
CCRTHeap                 C堆内存管理(malloc、free等)
CLocalHeap               Win32/Local内存管理(LocalAlloc、LocalFree等)
CGlobalHeap              Win32/Global内存管理(GlobalAlloc、GlobalFree等)(效果和CLocalHeap完全相同)
CWin32Heap               Win32/Heap内存管理(HeapAlloc、HeapFree等)</code>

九、Win32窗口类
<code class="lang-text">1.基类
CWindow                           Win32窗口句柄,以及相关WinAPI
CMessageMap                       消息分发功能(必须实现ProcessWindowMessage函数或BEGIN_MSG_MAP)
                                      
2.窗口类
CWindowImpl<t[,tbase,traits]>     窗口实现类(由子类T继承使用)
CDialogImpl<t[,tbase]>            对话框实现类(由子类T继承使用)
CSimpleDialog<idd[,iscenter]>     简单对话框
CContainedWindow                  被包含的窗口
CContainedWindowT<[tbase,traits]> 被包含的窗口(指定基类)
                                      
3.窗口风格类
CWinTraits<style,exstyle>         窗口风格缺省模板
CWinTraitsOR<style,exstyle,tbase> 窗口风格增量模板
CControlWinTraits                 控件风格
CFrameWinTraits                   框架窗口风格
CMDIChildWinTraits                MDI子窗口风格</style,exstyle,tbase></style,exstyle></[tbase,traits]></idd[,iscenter]></t[,tbase]></t[,tbase,traits]></code>

十、ActiveX控件容器
<code class="lang-text">1.常用窗口类
CAxWindow                         ActiveX控件
CAxWindow2                        带许可的ActiveX控件
CAxWindowT<[tbase]>               ActiveX控件(指定基类)
CAxWindow2T<[tbase]>              带许可的ActiveX控件(指定基类)
CAxDialogImpl<t[,tbase]>          带有ActiveX控件的对话框(由子类T继承使用)
                                     
2.常用事件接收器
IDispEventImpl<id,t[,iid,...]>    IDispatch事件接收器(由子类T继承使用,需定义BEGIN_SINK_MAP)
IDispEventSimpleImpl<id,t,iid>    IDispatch事件接收器(不需要类型库)(由子类T继承使用,需定义BEGIN_SINK_MAP)
IPropertyNotifySinkCP<t[,cdv]>    属性更改事件接收器(由子类T继承使用,需定义OnChanged和OnRequestEdit)
                                     
3.ATL定义的常用接口
IAxWinHostWindow                  ActiveX控件宿主窗口
IAxWinHostWindowLic               带许可的ActiveX控件宿主窗口
IAxWinAmbientDispatch             宿主窗口的环境属性</t[,cdv]></id,t,iid></id,t[,iid,...]></t[,tbase]></[tbase]></[tbase]></code>

[修改于 8年9个月前 - 2015/08/22 08:53:26]

来自:计算机科学 / 软件综合
2
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
acmilan 作者
8年9个月前 修改于 8年9个月前 IP:四川
789507
关于COM自动化智能类型的使用:
1. CComPtr<IDispatch>特化出了很多成员函数,其中最好用的是InvokeN,InvokeN只有4个参数,大大简化了使用。而IDispatch::Invoke则有8个参数,使用较为不便。
2. CComVariant可以当原生VARIANT使用(数据长度也是相同的,可以当数组用),可以帮助自动释放资源。
3. CComBSTR因为BSTR是一次性资源。用这个东西,你得知道它在哪里被建立要Empty一下。
4. CComSafeArray<T>好用,可以Attach和Detach进行加锁和解锁。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan作者
8年9个月前 IP:四川
789512
所谓自动化(Automation),就是可以与VB、VBScript、JScript、VB for Application等其它微软编程语言进行弱类型交互的能力。应用程序不用知道任何类型信息,只要知道组件名称(ProgID)和方法(Method)或属性(Property)的名称即可与之交互。从组件名称(ProgID)可以由CLSIDFromProgID然后CoCreateInstance来创建组件。支持自动化的组件必须支持IDispatch接口。IDispatch接口中,比较重要的有GetIDsOfNames可以获取方法或属性的ID(DISPID),Invoke可以调用方法或者属性。自动化必须使用VARIANT或VARIANT所能表示的类型,比如INT,LONG,VARIANT_BOOL,BSTR,SAFEARRAY等,不能使用其它类型。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
acmilan
进士 学者 笔友
文章
461
回复
2934
学术分
4
2009/05/30注册,5年3个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}