很多时候了解一项新技术的历史和趋势往往比这项技术的本身价值还要重要。WPF作为一项新技术已经三年多了或者应该叫老技术了我们都有必要了解它的来龙去脉尤其是公司的CTO、技术总监、架构师等决策层,因为他们对技术的选型及应用具有决定权。对于开发者来说了解自己正在从事的这个技术的前世今生有助于我们更好的认识技术本身的价值也可以避免我们少走一些弯路圣殿骑士就走过很多弯路所以对此比较感慨。从IT技术发展的这些年可以看出技术对于各大公司只是竞争的一种手段而对于大多数程序员来说技术就是特饭碗甚至于生命所以大家站的立场不同也会形成各自不同的观点。放眼现在的全球IT巨头摩托罗拉和诺基亚等企业的逐渐衰落苹果、谷歌和微软等巨头公司在硅谷已经上演了三国大战。国内腾讯、百度、新浪、网易、盛大、搜狐、阿里巴巴等公司在各个领域的混战已经表明新的市场和新的技术是他们的主要战场那么有些老技术必将淡出历史舞台部分新技术也将被推到台前作为IT人了解这些可以帮助我们看得更远避免一直处在自己的狭小空间当中等到了某个技术的真正失落我们才骤然发现失业已经降临到我们身边前途将一片灰暗2.本文提纲· 1.开篇前言· 2.本文提纲· 3.WPF介绍· 4.WPF技术发展历史· 5.之前的技术——逐渐淡出历史舞台· 6.WPF——王者的到来· 7.与现有技术的对比· 8.本文总结. 9.系列进度3.WPF介绍Windows APIWindows Presentation Foundation (WPF) 是下一代显示系统用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序。使用 WPF您可以创建广泛的独立应用程序以及浏览器承载的应用程序。 WPF 的核心是一个与分辨率无关并且基于向量的呈现引擎这样就可以保证图像和影像具有高清晰度旨在利用现代图形硬件的优势。WPF 通过一整套应用程序开发功能扩展了这个核心这些功能包括可扩展应用程序标记语言 (XAML)、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。WPF 包含在如下图的 Microsoft .NET Framework 3.0中使您能够生成融入了 .NET Framework 类库的其他元素的应用程序因为WPF包含在.NET Framework 3.0 里面所以我们这里不列出3.5和4.0的框架。.NET框架以及元素依赖图4.WPF技术发展历史微软在1983年春季就宣布开始研究开发Windows到现在已经有27年的历史这27年来微软官方主力推行的编程语言与API有四个主要阶段19831991年C搭配Windows API。当时的程序员是很少的并且开发一个项目也比较的不容易。19922001年这段时期C搭配MFC库。在历史上MFC是最多人用的Windows编程方法。但此后MFC技术也逐渐退出了历史的舞台。20022006年C#、VB以及其他语言Windows Form框架。这段期间IT技术的焦点是在Web上所以虽然大家都在用.NET但真正的主角是ASP.NET而不是Windows Forms。Windows Forms还没等熬出头WPF就出现了。Windows Forms注定会是历史中“最少人使用的微软开发技术”。Windows Forms其实是不错的技术在很多方面都做得挺不错比如在UI上、图形编程上、开发效率上、稳定性上都做得很让人敬佩但是我们最后看到的结果却是大家没有引起足够的重视很多人更偏向于用Delphi和MFC对Windows Forms却视而不见所以造成的最后结果就是Windows Forms生不逢时。2007现在 2007年1月30日Windows Vista正式全球同步发布。它之所以能实现那么绚丽的效果最关键的一点就是Windows Presentation FoundationWPFWPF所带来的震撼视觉效果和用户体验使Vista的效果如此绚丽虽然Vista在后来最终成为了一个败笔但它为Windows 7打下了坚实的继承。后台语言C#、VB以及其他语言XAML构成的WPF。你可能觉得很奇怪微软为何释出两个作用相似却不同且不相容的.NET API。因为时代的改进用户对视觉感受需求不断提高。因为WPF支持硬件加速、精确颜色、浮点坐标、动画实现、三维、视频感受等要求提高。而传统的 Winform 是到不到这些效果的。5.之前的技术——逐渐淡出历史舞台旧的事物迟早会退出历史舞台新的生命会经过曲折的里程登上王座。从图像界面的出现那一刻起用户界面UI就进入了一个特殊的历史时期。在随后几年里出现了很多具有历史意义的界面风格。现在经典的Windows窗口风格已经存在了10多年即使是深受用户喜爱的Windows XP风格也已出现五年有余。无疑大家与我一样期待着全新视觉界面的出现。另一方面当今计算机处理芯片飞速发展特别是显示芯片显示卡几乎成为了一台微型的计算机。但是其强大的处理能力却没有得到充分的应用。目前显示卡GPUGraphics Processing Unit的处理能力大多只应用在游戏和多媒体领域。为了给用户提供最强的体验满足不断提高的用户视觉需求Windows Vista引入了全新的图形子系统——WPF。她能充分利用显示卡的处理能力提供给用户最绚的视觉效果。在Windows Vista出现之前Windows平台的图形系统主要有GDI、GDI、Direct3D。其中GDI的应用领域最为广泛。GDI图形系统已经形成了很多年并且已经逐渐形成了自己的一套开发体系。它提供2D图形处理、文本处理以及有限的图像处理功能。虽然在一些显示卡上支持部分的GDI加速但是其效果与现在的Direct3D相比还是很弱小。GDI开始出现是在2001年它引入了2D图形的反走样、浮点数坐标、渐变以及单个象素的Alpha支持。它几乎支持所有的常用图像格式。但是GDI没有任何加速功能全部是用软件实现。NT依赖简图为了兼容性GDI和GDI在Windows Vista和现在的Windows 7中仍被支持只是功能稍有改变但大体上都还是没有差别。6.WPF——王者的到来在Windows Vista和Windows 7中GDI、GDI和WPF并行存在。但是WPF所有的操作都不依赖于GDI和GDI而是间接依赖于强大的Direct3D。请参考下面的WPF核心组件图。WPF核心组件图上图中的标示为暗红色的是WPF的三大核心组件其中milcore组件它的职责是完成与Direct3D的交互。并且出于效率和安全考虑milcore由非托管代码实现。WPF 中的所有显示是通过 DirectX 引擎完成的可实现高效的硬件和软件呈现。WPF 还要求对内存和执行进行精确控制。milcore 中的组合引擎受性能影响关系大需要放弃 CLR 的许多优点来提高性能。WPF的两大核心组件PresentationFramework和PresentationCore都位于通用语言运行库CLR之上。那么就可以看出WPF的大部分代码都是以托管形式存在的。这两大组件提供了WPF项目需要的函数库和功能库由于是以托管的形式存在所以也避免了我们直接操作底层和出现诸如内存泄露的可能性。关于WPF的是怎样执行的我这里也根据自己的一些理解画出了如下执行序列图。此图比较简单但很容易说明问题如果把中间的每一步骤都画出来可能会比较大为了使大家能看明白所以中间省略了一些操作。
WPF 基础到企业应用系列2——WPF前世今生
很多时候了解一项新技术的历史和趋势往往比这项技术的本身价值还要重要。WPF作为一项新技术已经三年多了或者应该叫老技术了我们都有必要了解它的来龙去脉尤其是公司的CTO、技术总监、架构师等决策层,因为他们对技术的选型及应用具有决定权。对于开发者来说了解自己正在从事的这个技术的前世今生有助于我们更好的认识技术本身的价值也可以避免我们少走一些弯路圣殿骑士就走过很多弯路所以对此比较感慨。从IT技术发展的这些年可以看出技术对于各大公司只是竞争的一种手段而对于大多数程序员来说技术就是特饭碗甚至于生命所以大家站的立场不同也会形成各自不同的观点。放眼现在的全球IT巨头摩托罗拉和诺基亚等企业的逐渐衰落苹果、谷歌和微软等巨头公司在硅谷已经上演了三国大战。国内腾讯、百度、新浪、网易、盛大、搜狐、阿里巴巴等公司在各个领域的混战已经表明新的市场和新的技术是他们的主要战场那么有些老技术必将淡出历史舞台部分新技术也将被推到台前作为IT人了解这些可以帮助我们看得更远避免一直处在自己的狭小空间当中等到了某个技术的真正失落我们才骤然发现失业已经降临到我们身边前途将一片灰暗2.本文提纲· 1.开篇前言· 2.本文提纲· 3.WPF介绍· 4.WPF技术发展历史· 5.之前的技术——逐渐淡出历史舞台· 6.WPF——王者的到来· 7.与现有技术的对比· 8.本文总结. 9.系列进度3.WPF介绍Windows APIWindows Presentation Foundation (WPF) 是下一代显示系统用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序。使用 WPF您可以创建广泛的独立应用程序以及浏览器承载的应用程序。 WPF 的核心是一个与分辨率无关并且基于向量的呈现引擎这样就可以保证图像和影像具有高清晰度旨在利用现代图形硬件的优势。WPF 通过一整套应用程序开发功能扩展了这个核心这些功能包括可扩展应用程序标记语言 (XAML)、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。WPF 包含在如下图的 Microsoft .NET Framework 3.0中使您能够生成融入了 .NET Framework 类库的其他元素的应用程序因为WPF包含在.NET Framework 3.0 里面所以我们这里不列出3.5和4.0的框架。.NET框架以及元素依赖图4.WPF技术发展历史微软在1983年春季就宣布开始研究开发Windows到现在已经有27年的历史这27年来微软官方主力推行的编程语言与API有四个主要阶段19831991年C搭配Windows API。当时的程序员是很少的并且开发一个项目也比较的不容易。19922001年这段时期C搭配MFC库。在历史上MFC是最多人用的Windows编程方法。但此后MFC技术也逐渐退出了历史的舞台。20022006年C#、VB以及其他语言Windows Form框架。这段期间IT技术的焦点是在Web上所以虽然大家都在用.NET但真正的主角是ASP.NET而不是Windows Forms。Windows Forms还没等熬出头WPF就出现了。Windows Forms注定会是历史中“最少人使用的微软开发技术”。Windows Forms其实是不错的技术在很多方面都做得挺不错比如在UI上、图形编程上、开发效率上、稳定性上都做得很让人敬佩但是我们最后看到的结果却是大家没有引起足够的重视很多人更偏向于用Delphi和MFC对Windows Forms却视而不见所以造成的最后结果就是Windows Forms生不逢时。2007现在 2007年1月30日Windows Vista正式全球同步发布。它之所以能实现那么绚丽的效果最关键的一点就是Windows Presentation FoundationWPFWPF所带来的震撼视觉效果和用户体验使Vista的效果如此绚丽虽然Vista在后来最终成为了一个败笔但它为Windows 7打下了坚实的继承。后台语言C#、VB以及其他语言XAML构成的WPF。你可能觉得很奇怪微软为何释出两个作用相似却不同且不相容的.NET API。因为时代的改进用户对视觉感受需求不断提高。因为WPF支持硬件加速、精确颜色、浮点坐标、动画实现、三维、视频感受等要求提高。而传统的 Winform 是到不到这些效果的。5.之前的技术——逐渐淡出历史舞台旧的事物迟早会退出历史舞台新的生命会经过曲折的里程登上王座。从图像界面的出现那一刻起用户界面UI就进入了一个特殊的历史时期。在随后几年里出现了很多具有历史意义的界面风格。现在经典的Windows窗口风格已经存在了10多年即使是深受用户喜爱的Windows XP风格也已出现五年有余。无疑大家与我一样期待着全新视觉界面的出现。另一方面当今计算机处理芯片飞速发展特别是显示芯片显示卡几乎成为了一台微型的计算机。但是其强大的处理能力却没有得到充分的应用。目前显示卡GPUGraphics Processing Unit的处理能力大多只应用在游戏和多媒体领域。为了给用户提供最强的体验满足不断提高的用户视觉需求Windows Vista引入了全新的图形子系统——WPF。她能充分利用显示卡的处理能力提供给用户最绚的视觉效果。在Windows Vista出现之前Windows平台的图形系统主要有GDI、GDI、Direct3D。其中GDI的应用领域最为广泛。GDI图形系统已经形成了很多年并且已经逐渐形成了自己的一套开发体系。它提供2D图形处理、文本处理以及有限的图像处理功能。虽然在一些显示卡上支持部分的GDI加速但是其效果与现在的Direct3D相比还是很弱小。GDI开始出现是在2001年它引入了2D图形的反走样、浮点数坐标、渐变以及单个象素的Alpha支持。它几乎支持所有的常用图像格式。但是GDI没有任何加速功能全部是用软件实现。NT依赖简图为了兼容性GDI和GDI在Windows Vista和现在的Windows 7中仍被支持只是功能稍有改变但大体上都还是没有差别。6.WPF——王者的到来在Windows Vista和Windows 7中GDI、GDI和WPF并行存在。但是WPF所有的操作都不依赖于GDI和GDI而是间接依赖于强大的Direct3D。请参考下面的WPF核心组件图。WPF核心组件图上图中的标示为暗红色的是WPF的三大核心组件其中milcore组件它的职责是完成与Direct3D的交互。并且出于效率和安全考虑milcore由非托管代码实现。WPF 中的所有显示是通过 DirectX 引擎完成的可实现高效的硬件和软件呈现。WPF 还要求对内存和执行进行精确控制。milcore 中的组合引擎受性能影响关系大需要放弃 CLR 的许多优点来提高性能。WPF的两大核心组件PresentationFramework和PresentationCore都位于通用语言运行库CLR之上。那么就可以看出WPF的大部分代码都是以托管形式存在的。这两大组件提供了WPF项目需要的函数库和功能库由于是以托管的形式存在所以也避免了我们直接操作底层和出现诸如内存泄露的可能性。关于WPF的是怎样执行的我这里也根据自己的一些理解画出了如下执行序列图。此图比较简单但很容易说明问题如果把中间的每一步骤都画出来可能会比较大为了使大家能看明白所以中间省略了一些操作。