1.windows api(Win32 API)
【使用VS,其头文件在C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include】WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口。我们对待API函数不必刻意去研究每一个函数的用法,那也是不现实的(能用得到的API函数有几千个呢)。正如某位大虾所说:API不要去学,在需要的时候去查API帮助就足够了。但是,许多API函数令人难以理解,易于误用,还会导致出错,这一切都阻碍了它的推广。
windows sdk
:微软每推出一个重要的windows版本,一般都会同时推出一个SDK(Software Development Kit)。SDK包含了开发该windows版本所需的windows函数和常数定义、API函数说明文档、相关工具和示例。SDK一般使用C语言,但不包括编译器。高版本VC++包括了SDK所有的头文件、帮助、示例和工具,不需要再安装SDK。
2.c标准函数库
【使用VS,其头文件在C:\Program Files\Microsoft Visual Studio 10.0\VC\include】使用C函数库的时候只需要包含#include头文件就能使用
3.c++标准函数库
【使用VS,其头文件在C:\Program Files\Microsoft Visual Studio 10.0\VC\include】使用C++函数库的时候不仅需要包含#include头文件,而且还要引入命名空间,例如using namespace std;
4.MFC
【使用VS,其头文件在C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include】是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类
5.ATL
(开发COM和ActiveX组件的C++动态模板库):atl是微软atl小组开发的,ATL是一个产生C++/COM代码的框架,就如同C语言是一个产生汇编代码的框架。ATL又不同于MFC,它完全面向COM
组件,其技术路线也不同于MFC,MFC使用的是C++中的继承
、封装
、嵌套
等常规技术,而ATL使用了C++中模板
、多继承
等高级技术,甚至还用到了STL
。所以学习和使用ATL要求我们必须熟悉这些C++高级特性。另一方面,ATL结构完全针对COM中的诸多规范,这就要求使用人员必须非常了解COM规范,才有可能真正把ATL用好
诞生原因:Microsoft公司在推出COM SDK
以后,为简化COM编程,提高开发效率,采取了许多方案,特别是在MFC(Microsoft Foundation Class)中加入了对COM和OLE的支持。但是随着Internet的发展,分布式的组件技术要求COM组件能够在网络上传输,而又尽量节约宝贵的网络带宽资源。采用MFC开发的COM组件由于种种限制不能很好地满足这种需求,因此Microsoft在1995年又推出了一种全新的COM开发工具ATL。
在ATL产生以前,开发COM组件的方法主要有两种:一是使用COM SDK直接开发COM组件,另一种方式是通过MFC提供的COM支持来实现。
首先ATL的基本目标就是使COM应用开发尽可能地自动化,这个基本目标就决定了ATL只面向COM开发提供支持。其次,ATL因其采用了特定的基本实现技术,摆脱了大量冗余代码,使用ATL开发出来的COM应用的代码简练高效,即所谓的“Slim Code”。第三,ATL的各个版本对Microsoft的基于COM的各种新的组件技术如MTS、ASP等都有很好的支持,ATL对新技术的反应速度大大快于MFC。ATL已经成为Microsoft支持COM应用开发的主要开发工具,因此COM技术方面的新进展在很短的时间内都会在ATL中得到反映。这使开发者使用ATL进行COM编程可以得到直接使用COMSDK编程同样的灵活性和强大的功能。
6.WTL
(Windows Template Library):wtl是微软atl小组开发的,诞生原因:在ATL出现的时候,一些部分COM的编程人员开始觉得开发COM运用是一种快乐,因为使用它很方便地开发小规模的COM组件,但好景不长,现实的COM组件是包罗相当广泛的,特别当它们准备使用窗口控件,发现ATL提供的相当的稀少。因此Microsoft推出了半成品与没有技术支持的WTL,这也是WTL诞生的原因。主要原因是用原始的 WIN32 API 编写漂亮的用户界面工作量大,繁杂。MFC 虽然提供了一套很好的封装,但是也不是很容易消化和使用,特别是各个MFC 类之间耦合很紧,要用好 MFC 就要理解很多 MFC 内在的运行机制(有人说 MFC 的封装是“白盒”封装,呵呵)。WTL 利用 C++ 模版的高级功能,提供很联系很松散的“独立”的类库,使用起来比较方便,而且代码体积小,不必为了学习某个类必须学习一大堆相关的类。
特点:1.模板化,因此有较小的代码量。例如,一个简单的“hello world”SDI应用程序,基于WTL的程序只有24KB,而MFC静态连接结果是440KB,MFC动态连接的结果是24KB+1MB。 2.无太多相关性,并且可以自由地和SDK代码直接混合。 3.不会强迫使用特定的应用程序模型,尤其相对于MFC的应用程序框架。
WTL类包括:
标准控制(编辑框,列表框,按钮等等)
公共控制(包括列表视图,树形视图,进度条,微调按钮)
IE控制(rebar,平面滚动条,日历等等)
命令条,菜单,和更新UI类
公共对话框
属性单和页类
框架窗口,MDI框架和子框架,分隔条,可滚动的窗口
设备环境(DC)和GDI对象类(笔、刷子、位图等)
打印机及其信息和设备模式类
实用工具类:包括CPoint, CRect, CSize, 和CString类
7.STL(标准C++程序开发的模板库)
STL是惠普实验室开发的一系列软件的统称,作为ANSI/ISOC++的一部分,已经被C++标准委员会正式采纳,STL的一个重要特点是数据结构和算法的分离,这使其非常通用。另一个重要特性为不是面向对象的,为了实现通用性。
STL有6大组件:
algorithm
(算法)、Container
(容器)和iterator
(迭代器),function object
(函数对象)、adaptors
(适配器)和allocator
(记忆体配置器),其中最主要的是前三个组件。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。
在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。
算法
部分主要由头文<algorithm>,<numeric>和<functional>组成。
容器
部分主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>组成。
迭代器
部分主要由头文件<utility>,<iterator>和<memory>组成。
**STL的容器可以分为以下几个大类: **
一:序列容器 有vector, list, deque, string.
二 : 关联容器 有set, multiset, map, mulmap, hash_set, hash_map, hash_multiset, hash_multimap
三: 其他的杂项 有stack, queue, valarray, bitset
STL的目的是标准化组件,这样你就不用重新开发它们了。你可以仅仅使用这些现成的组件。STL现在是C++的一部分,因此不用额外安装什麽。
STL算法是标准算法,我们可以把它们应用在那些容器中的对象上。这些算法都有很著名的执行特性。它们可以给对象排序,删除它们,给它们记数,比较,找出特殊的对象,把它们合并到另一个容器中,以及执行其他有用的操作
8.afx(微软AFX小组开发的)
以afx开头的函数不能说是MFC的全局函数,而是MFC的类函数。当初这个小组打算建立一个可以跨Linux和windows平台的设计软件,结果失败了,遗留了大量的函数以afx命名,最终用类的概念建立了MFC的框架,所以现在MFC之中有很多afx函数,这些函数可以用API函数替代。AFX 小组预期MFC 的使用者不可能人人皆为C++ 专家,所以他们并没有采用所有的C++高阶性质(例如多重继承)。许多「麻烦」但「几乎一成不变」的Windows程序动作都被隐藏在MFC 类别之中, 例如WinMain、RegisterClass、Window Procedure 等等等。