从Visual C++ .NET 2002中启动,一些现有MFC实用工具选件类复盖或修改减少它们在其他MFC选件类的依赖项。这些实用工具选件类现在可用于任何本机C++项目。本节包含仅是前面提供对MFC项目和现在共享的选件类,以及一些新选件类与 CString中的更改相关。不包括ATL选件类,可用于任何本机C++项目类型使用适当的标头的中。
本节内容
- 选件类在MFC和ATL之间共享
提供指向选件类共享在MFC和ATL之间。
相关章节
-
活动模板库 (ATL) 引用
提供 ATL 库的参考资料,这是一组基于模板的 C++ 类,用于简化 COM 对象的编程。 -
选件Microsoft基础类库(mfc)引用
提供MFC库的参考资料,设置选件类由于构成应用程序框架,用于Windows API编写的应用程序框架。 -
Visual C++ Sample Applications
提供一些代码示例链接,演示 Visual C++ 的功能,以及它支持的库和技术。 -
Visual C++ 库
提供指向Visual C++附带的各种库,包括ATL、MFC,OLE DB模板、运行库和标准C++库。 -
调试
提供一些链接,所涉及内容为使用 Visual Studio 调试器纠正应用程序或存储过程中的逻辑错误
MFC和ATL共享的选件类
- 项目
下表列出了选件类共享在MFC和ATL之间。
| 类 | 说明 | 标头文件 |
|---|---|---|
| CFileTime | 用于管理日期和时间值的方法与文件。 | atltime.h |
| CFileTimeSpan | 用于管理相对日期和时间值的方法与文件。 | atltime.h |
| CFixedStringT | 使用固定字符缓冲区表示字符串对象。 | cstringt.h |
| CImage | 提供在JPEG、GIF、BMP和可移植网络映像(PNG)格式的增强支持位图,包括能够加载和保存图像。 | atlimage.h |
| COleDateTime | 封装用于OLE自动化的 DATE 数据类型。 | atlcomtime.h |
| COleDateTimeSpan | 表示相对时间,时间范围。 | atlcomtime.h |
| CPoint | 选件类类似于还包括成员函数操作 CPoint 和 POINT 结构的Windows POINT 结构。 | atltypes.h |
| CRect | 选件类类似于还包括成员函数操作 CRect 对象和Windows RECT 结构的Windows RECT 结构。 | atltypes.h |
| CSimpleStringT | 表示 CSimpleStringT 对象。 | atlsimpstr.h |
| CSize | 选件类类似于Windows范围结构,实现相对坐标或位置。 | atltypes.h |
| CStrBufT | 为 GetBuffer 提供自动清理资源,并 ReleaseBuffer 在现有 CStringT 对象调用。 | atlsimpstr.h |
| CStringData | 表示字符串对象的数据。 | atlsimpstr.h |
| CStringT | 表示 CStringT 对象。 | cstringt.h (MFC依赖项) atlstr.h (MFC独立) |
| CTime | 表示绝对时间和日期。 | atltime.h |
| CTimeSpan | 时间,在内部存储为秒数。时间范围。 | atltime.h |
| IAtlStringMgr | 表示接口。CStringT 内存管理器。 | atlsimpstr.h |
请参见
其他资源
ATL/MFC共享选件类
ATL 集合选件类
- 项目
ATL用于存储和访问数据提供了许多选件类。要选件类您决定使用取决于多种因素,包括:
-
要存储的数据量。
-
效率与访问数据的性能
-
访问的能力数据按索引或由键
-
该数据如何命令
-
个人喜好
小的集合选件类
ATL提供了以下数组选件类少量的对象。但是,这些选件类是有限和内部设计为使用由ATL。建议不要在程序中使用它们。
| 类 | 数据存储区的类型 |
|---|---|
| CSimpleArray | 实现托管数组选件类少量的对象。 |
| CSimpleMap | 实现处理的映射选件类少量的对象。 |
泛型集合类选件
在泛型集合类,如类实现数组,列表和映射和提供:
| 类 | 数据存储区的类型 |
|---|---|
| CAtlArray | 实现一个数组。 |
| CAtlList | 实现一个列表。 |
| CAtlMap | 实现一个映射的结构,通过数据可由键或值引用。 |
| CRBMap | 使用红色黑色算法,实现一映射机制。 |
| CRBMultiMap | 实现红色黑色multimapping的结构。 |
这些选件类将捕获许多编程错误,当使用调试生成,但是,为了性能缘故,这些检查在发布版本不执行任何操作。
专用集合选件类
专用集合选件类为托管内存指针和接口指针还提供:
| 类 | 用途 |
|---|---|
| CAutoPtrArray | 当构造一个数组智能指针时,提供有用的方法。 |
| CAutoPtrList | 当构造列出了智能指针时,提供有用的方法。 |
| CComUnkArray | 存储 IUnknown 指针和旨在用作参数 IConnectionPointImpl 模板选件类。 |
| CHeapPtrList | 当构造列表堆指针时,提供有用的方法。 |
| CInterfaceArray | 当构造一个数组COM接口指针时,提供有用的方法。 |
| CInterfaceList | 当构造列表COM接口指针时,提供有用的方法。 |
选择集合类选件
每个可用的集合选件类提供不同的性能特征,如下表所示。
-
列2和3描述每选件类的排序和访问属性。在表中,“顺序”结尾意味着项插入和删除的顺序决定它们的集合中的顺序;并不意味着项目在它们的内容排序。该术语“标记”意味着集合中的项可以由整数索引检索,这与在典型的数组的项目。
-
列4和5描述每选件类的性能。在需要许多插入到集合的应用程序,插入速度可能尤其重要;对于其他应用程序,查找速度可能更为重要。
-
第6列描述每个形状是否允许重复元素。
-
特定的集合选件类操作的性能显示基于时间之间的关系完成操作和元素数集合中的。需要线性递增的时间的操作,则元素数目有所增加称为o(n)算法。相反,需要如此增加的时间的操作,则元素数目有所增加称为O (log n)算法。因此,就性能而言,O (log n)算法超过o(n)多算法,当元素数增加。
集合形态功能
| 形状 | 排序? | 标记? | 插入 元素 | 搜索 指定的元素 | 重复 元素? |
|---|---|---|---|---|---|
| 列表 | 是 | 否 | 优先(常数的时间) | 降低o(n) | 是 |
| 数组 | 是 | 由int(4)常数的时间) | 降低o(n)除外,如果插入到末尾,在常数时情况下 | 降低o(n) | 是 |
| 映射 | 否 | 由键(常数的时间) | 优先(常数的时间) | 优先(常数的时间) | 没有(键)是(值) |
| 红色黑色映射 | 是(由键) | 由键O (log n) | 快速O (log n) | 快速O (log n) | 否 |
| 红色黑色基于 | 是(由键) | 由键O (log n) (一键多值) | 快速O (log n) | 快速O (log n) | 是(一键多值) |
使用CTraits Objects
当ATL 集合选件类可用于存储大量用户定义的数据类型,可以重写重要功能(如比较会很有用。使用CTraits选件类,则实现。
CTraits选件类相似,但是,更为灵活,MFC集合类选件helper函数;请参见 集合选件帮助器类 有关更多信息。
当编写您的集合选件类时,可以指定CTraits选件类的选项。此选件类将包含将执行操作(如比较,在调用没有其他方法组成集合选件类的代码。例如,在中,如果列表对象包含您的用户定义的结构,您可能希望重新定义相等测试只比较某些成员变量。这样,列表对象中查找方法将运行提供更有用的方式。
示例
代码
// Collection class / traits class example.
// This program demonstrates using a CTraits class
// to create a new comparison operator.#define MAX_STRING 80// Define our own data type to store in the list.struct MyData
{int ID;TCHAR name[MAX_STRING];TCHAR address[MAX_STRING];
};// Define our own traits class, making use of the
// existing traits and overriding only the comparison
// we need.class MyTraits : public CElementTraits< MyData >
{
public:// Override the comparison to only compare// the ID value.static bool CompareElements(const MyData& element1, const MyData& element2){if (element1.ID == element2.ID)return true;elsereturn false;};
};void DoAtlCustomTraitsList()
{// Declare the array, with our data type and traits class CAtlList < MyData, MyTraits > MyList;// Create some variables of our data typeMyData add_item, search_item;// Add some elements to the list.add_item.ID = 1;_stprintf_s(add_item.name, _T("Rumpelstiltskin"));_stprintf_s(add_item.address, _T("One Grimm Way"));MyList.AddHead(add_item);add_item.ID = 2;_stprintf_s(add_item.name, _T("Rapunzel"));_stprintf_s(add_item.address, _T("One Grimm Way"));MyList.AddHead(add_item);add_item.ID = 3;_stprintf_s(add_item.name, _T("Cinderella"));_stprintf_s(add_item.address, _T("Two Grimm Way"));MyList.AddHead(add_item);// Create an element which will be used// to search the list for a match.search_item.ID = 2;_stprintf_s(search_item.name, _T("Don't care"));_stprintf_s(search_item.address, _T("Don't care"));// Perform a comparison by searching for a match// between any element in the list, and our// search item. This operation will use the// (overridden) comparison operator and will// find a match when the IDs are the same.POSITION i;i = MyList.Find(search_item);if (i != NULL)_tprintf_s(_T("Item found!\n"));else_tprintf_s(_T("Item not found.\n"));
}
注释
有关CTraits选件类的列表,请参见 集合选件类。
下图显示CTraits选件类的选件类层次结构。

集合类示例
下面的示例演示集合选件类:
-
MMXSwarm示例
-
DynamicConsumer示例
-
UpdatePV示例
-
marquee示例
请参见
概念
集合类
其他资源
ATL概念


















