MFC和ATL共享的选件类

article/2025/11/10 18:37:55

从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

选件类类似于还包括成员函数操作 CPointPOINT 结构的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概念


http://chatgpt.dhexx.cn/article/GgGu8qTg.shtml

相关文章

Visual studio调试技巧的总结与如何检测内存泄漏问题?

1、如何使用VS自带的功能函数来进行整个工程代码是否有内存泄漏问题&#xff1a; 参考博客&#xff1a;http://blog.sina.com.cn/s/blog_149e9d2ec0102wyvr.html &#xff08;介绍_CrtSetDbgFlag函数&#xff09; 参考博客&#xff1a;vs中内存泄漏检测的方法总结 &#xf…

克鲁斯卡尔算法生成最小生成树

克鲁斯卡尔算法的介绍 1)克鲁斯卡尔(Kruskal)算法&#xff0c;是用来求加权连通图的最小生成树的算法。 2)基本思想&#xff1a;按照权值从小到大的顺序选择 n-1条边&#xff0c;并保证这 n-1条边不构成回路 3)具体做法&#xff1a;首先构造一个只含 n个顶点的森林&#xff…

克鲁斯卡尔算法学习(Java)

克鲁斯卡尔算法学习&#xff08;Java&#xff09; 学习视频&#xff1a;尚硅谷韩老师java讲解数据结构和算法 一、应用场景-公交站问题 某城市新增 7 个站点(A, B, C, D, E, F, G) &#xff0c;现在需要修路把 7 个站点连通各个站点的距离用边线表示(权) &#xff0c;比如 A …

克鲁斯卡尔算法 与 普里姆算法

克鲁斯卡尔算法 设G&#xff08;V&#xff0c;E&#xff09;是具有n个顶点的连通网&#xff0c;T&#xff08;U&#xff0c;TE&#xff09;是其最小生成树。 1、选取权值最小的边&#xff08;Vi&#xff0c;Vj&#xff09;&#xff0c;若边&#xff08;Vi&#xff0c;Vj&…

最小生成树:克鲁斯卡尔算法+普里姆算法

目录 一、最小生成树 二、克鲁斯卡尔算法 1、思路 2、示例 3、C语言代码 三、普里姆算法 1、思路 2、C语言代码 一、最小生成树 一棵最小生成树需要满足哪些条件呢&#xff1f; 不存在回路对于具有n个顶点的连通网&#xff0c;其生成树中只能有n-1条边&#xff0c;这…

用c语言描述普里姆算法和克鲁斯卡尔算法,克鲁斯卡尔算法+普里姆算法 详解

克鲁斯卡尔算法: 【1】克鲁斯卡尔算法 普里姆算法是以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树。 克鲁斯卡尔算法是直接以边为目标去构建。 因为权值是在边上,直接去找最小权值的边来构建生成树也是很自然的想法,只不过构建时要考虑是否会形成环路而已。 …

十大算法之克鲁斯卡尔算法

克鲁斯卡尔算法介绍 克鲁斯卡尔(Kruskal)算法&#xff0c;是用来求加权连通图的最小生成树的算法。 基本思想&#xff1a;按照权值从小到大的顺序选择n-1条边&#xff0c;并保证这n-1条边不构成回路 具体做法&#xff1a;首先构造一个只含n个顶点的森林&#xff0c;然后依权值…

0096 克鲁斯卡尔算法,迪杰斯特拉算法

/* * 克鲁斯卡尔算法 * 1.用来求加权连通图的最小生成树的算法 * 2.思想&#xff1a;按照权值从小到大的顺序&#xff0c;选择n-1条边&#xff0c;并保证这n-1条边不构成回路 * 3.先构造一个只含n个顶点的森林&#xff0c;依权值从小到大从连通网中选择边加入到森林中 * …

普里姆 克鲁斯卡尔算法

一.简介 连通图&#xff1a;任意2节点之间都有路径相通 最小生成树&#xff1a;最小权重生成树 一个 n 结点的连通图的生成树是原图的极小连通子图&#xff0c;且包含原图中的所有 n 个结点&#xff0c;并且有保持图连通的最少的边&#xff08;n-1&#xff09;。 最小生成树可…

c语言克鲁斯卡尔算法

克鲁斯卡尔思路以及代码分析 我们用邻接矩阵来表示该图&#xff0c;克鲁斯卡尔算法思想及找到最小边&#xff0c;查看是否形成回路&#xff0c;若形成回路则这条边不形成&#xff0c;若不形成回路则构成最小路径&#xff0c;以此类推。&#xff08;思路和代码都在下方&#xff…

了解克鲁斯卡尔算法

文章目录 Kruskal算法如何工作Kruskal算法的示例Kruskal算法伪代码C示例Kruskal算法 vs Prim算法Kruskal算法的复杂度Kruskal算法的应用参考文档 在本教程中&#xff0c;您将学习Kruskal算法如何工作。此外&#xff0c;您还将找到C语言的示例。     Kruskal算法是一种最小生…

克鲁斯卡尔算法

什么是克鲁斯卡尔算法 在知道克鲁斯卡尔算法之前我们先来看一下什么是最小生成树。 最小生成树&#xff1a;在一个有n个结点的无向图中选出最少的边&#xff0c;保证所选边权相加之和最小以及该图中依然有n个结点并且n个结点连通。一共有n个结点&#xff0c;要保证连通&#…

Kruskal算法(克鲁斯卡尔算法)

Kruskal算法 Kruskal算法是一种用来查找最小生成树的算法&#xff0c;由Joseph Kruskal在1956年发表。用来解决同样问题的还有Prim算法和Boruvka算法等。三种算法都是贪心算法的应用。 概念解释 Kruskal算法定义&#xff1a;**先构造一个只含 n 个顶点、而边集为空的子图&…

KruskalAlgorithm(克鲁斯卡尔算法)

KruskalAlgorithm介绍 克鲁斯卡尔(Kruskal)算法&#xff0c;是用来求加权连通图的最小生成树的算法。基本思想&#xff1a;按照权值从小到大的顺序选择 n-1 条边&#xff0c;并保证这 n-1 条边不构成回路具体做法&#xff1a;首先构造一个只含 n 个顶点的森林&#xff0c;然后…

数据结构——克鲁斯卡尔(Kruskal)算法

克鲁斯卡尔算法是求连通网的最小生成树的另一种方法。与普里姆算法不同&#xff0c;它的时间复杂度为O&#xff08;eloge&#xff09;&#xff08;e为边数&#xff09;&#xff0c;适合于求边稀疏的网的最小生成树 。克鲁斯卡尔算法从另一途径求网的最小生成树。其基本思想是&a…

克鲁斯卡尔(Kruskal)算法(严蔚敏C语言)

克鲁斯卡尔算法(Kruskal) ​ 克鲁斯卡尔算法是求连通网的最小生成树的另一种方法。与普里姆算法不同&#xff0c;它的时间复杂度为O&#xff08;eloge&#xff09;&#xff08;e为网中的边数&#xff09;&#xff0c;所以&#xff0c;适合于求边稀疏的网的最小生成树 。 ——百…

4.《学会提问》

1.书中的观点 批判性思维会教你很多技能和态度&#xff0c;让你理性地找到对自己有意义的答案并为此感到自豪。批判性思维鼓励你倾听他人&#xff0c;向别人学习&#xff0c;同时掂量别人所说的话&#xff0c;看看它们的分量如何。如此&#xff0c;你将了解到我们必须要依赖他人…

如何提问——提问的艺术

转存失败重新上传取消https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md

《提问的艺术》读书笔记

分享读《提问的艺术》的xmind总结&#xff0c;每周听一本书&#xff0c;打卡第一周

(转载) 提问的艺术

虽然这是老话常谈&#xff0c;但是最近的回答问题的过程中&#xff0c;有点感触。你问题问的好&#xff0c;问的准确&#xff0c;回答你的人才有积极性给你答复&#xff0c;这样你又可以更快的解决你的问题。好多人不知道如何提问&#xff0c;所以我打算把这篇老文章转过来置顶…