微软软件开发技术二十年回顾-MFC篇
Windows API是面向过程的接口,因此对于当时的编程技术来说,它是完美无缺的。但是,随着人们逐渐使用
b.com/">C++
进行Windows程序的开发,迫切需要建立与Windows API的面向对象包装的接口。1992年,微软将Windows API开发成为它的应用程序框架(AFX),后来该产品又演变成为目前的微软基础类库(MFC)产品。下图2展示了MFC的顶级类层次结构。
图2.MFC的类层次结构。
MFC为使用C++开发Windows GUI应用程序提供了一个十分全面的基础框架,它对以前的API进行了面向对象的科学包装,大大简化和加快了程序的开发。
Win95推出后出现在Visual C++ 4中的新版本的MFC 4.0使这个框架达到辉煌时期,在4.2版本时达到鼎盛。
MFC框架中引入了一种适应当时开发需求的典型的文档-视图机制,从而大大简化了程序开发。当然,要掌握这些框架结构绝非一日之功,其中还涉及到部分COM及大量的宏技术。也正由于这些方面,导致了业界对MFC的褒贬不一。但正如其它微软技术一样,这只能进一步促进微软继续改进这种技术。几十年的技术积累已经奠定了MFC的生存基础,即使Windows的Vista发布,MFC也不可能退出Windows的舞台。事实上,Vista之后的Visual Studio.NET仍将MFC作为一个重要的组成部分,在今年的Visual Studio.NET 2005中,MFC在C++中的位置依然如故。MFC的未来,应该不必担心,只要你深入考察.NET类库,你会发现,MFC的许多思想机制正悄然进入.NET。
新版的Visual C++.NET中MFC已经支持.NET开发了,而且MFC与ATL的协作更趋于和谐。如今你可以在Visual C++.NET中综合应用MFC、ATL与.NET库三者来开发应用程序,从而进一步增强C++开发的威力。
【补注】ATL框架与WTL框架
ATL即“ActiveX模板库”。它不能单独工作,是设计与Visual C++ V4.2,V5.0,V6.0一起工作的。
MFC和ATL都可以用来开发ActiveX控件。事实上,两者都支持各种开发向导和强有力的帮助类和模板,从而使控件的开发尽量简单。而且,这两种框架各有千秋。简言之,如果你相当熟悉MFC的各种机制而且是在创建庞大而成熟的图形应用程序本地控件或服务器控件,那么使用MFC书写控件时会有很大的优越性。
然而,用MFC建立的控件在执行时要求相应的MFC DLL支持,相应地导致体积庞大。如果在控件的规模成问题时,则可以考虑 使用另一种方法-ATL活动模板库。
在建立轻量级控件(几乎或根本没有用户界面要求的COM或DCOM服务器)时,ATL方法是MFC方法的替代方法。ATL在建立COM组件时使用了模板机制,这个框架对许多标准的COM接口提供了大量的模板。事实上,ATL根本不需要任何类型的运行时刻服务—由于以C++模板为基础,所以ATL对于外部库根本没有链接依赖性。因此,基于ATL的组件要比等价的基于MFC的控件占用的资源少。
WTL框架,作为ATL的扩展,也是由ATL小组开发的,包含在微软于2000年1月发布的开发平台SDK包中,虽然微软没有正式支持。WTL通过提供一个用于编写Win32应用程序和控件的轻量级的框架、一些特殊的视图、GDI对象和实用的类来扩展ATL窗口类。WTL的目标是成为最好和最简单的实现基于Win32和ATL的应用程序、服务器和控件的方法。
微软软件开发技术二十年回顾-MFC篇的更多相关文章
- 微软软件开发技术二十年回顾-API篇(转)
二. API篇 随着Windows操作系统开始占据主导地位,开发Windows平台下的应用程序成为人们的需要.当然,这也为传统的DOS程序员提供了一种新的编程方法-一种不受设备限制并由事件驱动的编程方 ...
- 微软软件开发技术二十年回顾-COM、OLE、ActiveX及COM+篇
本文摘自:http://www.job168.com/info/read_100394.html 微软的许多技术,如OLE.ActiveX.以及DirectX等都是基于COM技术而建立起来的.微软本身 ...
- 微软软件开发技术二十年回顾-Windows DNA篇
五. Windows DNA篇 微软的Windows分布式因特网应用体系(简称Windows DNA)是微软创建新一代高适应性商业解 决方案的框架,它使公司能够充分地挖掘数字神经系统的优点.Windo ...
- 微软软件开发技术二十年回顾-.NET框架篇
六. .NET框架篇 .NET是微软自从发布Windows 3.0以来最为激动人心的新技术,是微软战略上为下一个十年对服务器和桌面软件工程的第一步,是微软的一场世纪大豪赌.对于.NET,微软的定义是, ...
- fir.im Weekly - 2016 移动开发技术大回顾
2016 年是移动技术发展迅速的一年,认认真真回顾这一年必不可少.@移动开发前线 的 这篇 2016移动开发技术巡礼 ,精心盘点了 2016 年 移动开发技术大事件,分为 iOS/Android平台篇 ...
- 粮草先行——Android折叠屏开发技术点番外篇之运行时变更处理原则
上一篇文章中,我们有提到Activity在屏幕尺寸发生变更时的处理方式,总共有两种: 重启APP以适应屏幕改变: 手动处理数据,避免APP重启. 同样,这两种方式也同时适用于改变屏幕方向.更改系统语言 ...
- javac选项以递归方式编译给定目录下的所有Java文件 - IT屋-程序员软件开发技术分享社区
http://www.it1352.com/539276.html #Linux $ find -name“* .java”> sources.txt $ javac @ sources.txt ...
- 快速全面了解QT软件界面开发技术
快速全面了解QT软件界面开发技术 目录 前言 一. 学习QT可能的目的是什么? 只想体验一下QT? 当前的项目选择了用QT. 为将来做QT技术储备. 二. QT的核心技术优势是什么? QT在软 ...
- nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞
第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...
随机推荐
- Seata 0.7.0 正式发布
Seata 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题.Seata 0.7.0 已正式发布,本次共合并59pr,主要包括: ...
- JavaScript--for in循环访问属性用"."和[ ]的区别
// for in 循环遍历对象的时候// 内部要访问属性的时候不能点语法访问,因为for in 的key是字符串格式// 可通过方括号实现访问 for(var key in manObj) { co ...
- X-editable 不能二次初始化的问题解决方案
最近用到了 X-editable 可编辑表格插件,发现了一个头疼的问题,X-editable 不能对同一个 <a> 元素二次初始化. 如下代码举例:在页面加载完成时,用“数组1”填充一个下 ...
- Libevent:3创建event_base
在使用Libevent函数之前,需要分配一个或多个event_base结构.每一个event_base都持有一个events的集合,并且可以检测那些events是激活的. 如果设置event_base ...
- Gym - 101480K_K - Kernel Knights (DFS)
题意:有两队骑士各n人,每位骑士会挑战对方队伍的某一个位骑士. (可能相同) 要求找以一个区间s: 集合S中的骑士不会互相挑战. 每个集合外的骑士必定会被集合S内的某个骑士挑战. 题解:讲真被题目绕懵 ...
- qt 在ui界面添加控件后在cpp文件中无法调用?
问题:qt 在ui界面添加控件后在cpp文件中无法调用? 解决方法:在build选项中选择“重新build项目”,再次在cpp中调用添加的控件发现可以调用了. 还有一种情况导致添加控件后无法调用,就是 ...
- @hdu - 6329@ Problem K. Transport Construction
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定 n 个点,第 i 个点位于 (xi, yi). 在第 i ...
- 模板—Hash_map
struct Hash_map { ],nx[]; ];]; inline double &operator [] (int x) { ,i=fi[k]; for(;i&&st ...
- MySQL5.7默认打开ONLY_FULL_GROUP_BY模式问题与解决方案
MySQL5.7后将sql_mode的ONLY_FULL_GROUP_BY模式默认设置为打开状态,这样一来,很多之前的sql语句可能会出现错误,错误信息如下: Error Code: 1055. Ex ...
- FastReport模板设计和调用
FastReport是功能齐全的报表控件,使开发者可以快速并高效地为·NET/VCL/COM/ActiveX应用程序添加报表支持.最近一个项目就涉及到了FastReport报表的应用.这里简单记录下( ...