1.开篇前言

      非常多时候了解一项新技术的历史和趋势往往比这项技术的本身价值还要重要。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 client应用程序。使用 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有四个主要阶段:

  • 1983~1991年:C搭配Windows API。

    当时的程序猿是非常少的,而且开发一个项目也比較的不easy。

  • 1992~2001年:这段时期C++搭配MFC库。

    在历史上MFC是最多人用的Windows编程方法。但此后MFC技术也逐渐退出了历史的舞台。

  • 2002~2006年:(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 Foundation(WPF),WPF所带来的震撼视觉效果和用户体验使Vista的效果如此绚丽。尽管Vista在后来终于成为了一个败笔,但它为Windows 7打下了坚实的继承。后台语言(C#、VB以及其它语言)+XAML构成的WPF。你可能认为非常奇怪,微软为何释出两个作用相似。却不同且不相容的.NET
    API。由于时代的改进,用户对视觉感受需求不断提高。

    由于WPF支持硬件加速、精确颜色、浮点坐标、动画实现、三维、视频感受等要求提高。

    而传统的 Winform 是到不到这些效果的。

5.之前的技术——逐渐淡出历史舞台

      旧的事物迟早会退出历史舞台。新的生命会经过曲折的里程登上王座。从图像界面的出现那一刻起,用户界面(UI)就进入了一个特殊的历史时期。在随后几年里,出现了非常多具有历史意义的界面风格。如今,经典的Windows窗体风格已经存在了10多年,即使是深受用户喜爱的Windows XP风格也已出现五年有余。无疑大家与我一样。期待着全新视觉界面的出现。还有一方面,当今计算机处理芯片飞速发展,特别是显示芯片,显示卡差点儿成为了一台微型的计算机。可是,其强大的处理能力却没有得到充分的应用。

眼下。显示卡GPU(Graphics
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的是如何运行的,我这里也依据自己的一些理解画出了例如以下运行序列图。此图比較简单,但非常easy说明问题,假设把中间的每一步骤都画出来,可能会比較大,为了使大家能看明确,所以中间省略了一些操作。

WPF运行序列图

前面说了WPF的前世今生,那么对于开发者。我们最关心的WPF所提供的功能。以下的这幅图展示了WPF基本功能和服务。

WPF基本功能结构

正如上面的这幅图,能够看出一共分成了五大块(Core Presentation、User Interface Services、Base Services、Document Servies和XPS Viewer):

  • Core Presentation:包括了全部的图形效果,如图形、2D图形、3D图形、文本、音频、视频和显示效果。

    同一时候还包括强大的动画效果。动画能够应用前面的全部元素。最以下的那个就是视觉基本元素。

  • User Interface Services:包括了Application Services(应用程序服务)、Deployment Services(部署服务)、Controls(控件库)、Layout(布局)和Data Binding(数据绑定).
  • Base Services:提供了XAML支持、Accessibility(提高开发效率)、Input&Events(输入和事件的支持)、Property 

    System(属性系统)。
  • Document Servies和XPS Viewer则提供了主要的打印和表报服务,能够通过这些组件实现自己定义的打印和显示效果。

基于上面的特性以及我们使用的情况能够总结出:

在输入方面:WPF支持键盘、鼠标、手写笔、触摸屏。蓝牙录入、视频扑捉等,所以基本没有不论什么限制,在和外部设备的交互上:有驱动、COM、Win32或通信协议支持的不论什么设备。打印和报表方面:可訪问打印对话框、打印队列、打印窗口、控件以及非常多可选操作。同一时候对报表也支持得非常好。同一时候支持流文档和固定文档。对命令的支持以及对文件的无限制訪问。最后尤其在动画、图形图像、3D、影像的支持相当好(其它技术是非常难做到的),所以WPF除了在性能方面存在着缺陷以外,其它方面能够说是做得非常优秀。同一时候我们有信心相信微软会在这方面做得更好!

7.与现有技术的对照

WPF作为一项已经用了将近三年的技术。它究竟和现有的一些技术有哪些差别和联系呢?以下一副图简单的介绍了它和如今的一些技术的相似之处。

WPF

如今的技术

XAML

XHTML

Layout

WinForms 2.0 Panels

Data Binding

ASP.NET Syntax

Data Templates

ASP.NET Templates(Atlas)

Styles

CSS

Control Templates

 

3D

Managed DirectX

Animation

Flash

从上面能够看出。WPF技术和其它的技术有非常多相似之处。比方XAML和XHTML、Styles和CSS等尤其相似,所以对我们的开发者来说学习也不是一件难事。

8.总结

这篇文中介绍了WPF的前世今生,同一时候介绍了WPF的执行原理和基本应用。在最后也介绍了WPF所包括的主要功能和与现有技术的对照,那么在下一篇我们会解说WPF的实际开发,通过一个案例对照WPF和之前的WinForm之间的区别,从而对WPF有一个正确的认识。

最后圣殿骑士 会尽心尽力写好这个系列,同一时候因为是自己对这些技术的使用总结和心得体会,错误之处在所难免。怀着技术交流的心态。在博客园51CTO发表出来,所以希望大家可以多多指点,这样在使一部分人受益的同一时候也能纠正我的错误观点。以便和各位共同提高,兴许文章敬请关注!

WPF 基础到企业应用系列2——WPF前世今生的更多相关文章

  1. WPF 基础到企业应用系列5——WPF千年轮回 续前缘

    一.摘要 首先非常高兴这个系列能得到大家的关注和支持,前端时间身体状况不适,所以暂停了更新,对此表示非常抱歉,以后会逐渐加快进度.只是因为这是一个非常长的系列,我也想把它写好,所以以后也会慢慢来,在这 ...

  2. WPF基础到企业应用系列6——布局全接触

    本文转自:http://knightswarrior.blog.51cto.com/1792698/365351 一. 摘要 首先很高兴这个系列能得到大家的关注和支持,这段时间一直在研究Windows ...

  3. WPF 基础到企业应用系列索引

    转自:http://www.cnblogs.com/zenghongliang/archive/2010/07/09/1774141.html WPF 基础到企业应用系列索引 WPF 基础到企业应用系 ...

  4. WPF 基础到企业应用系列1——开篇故意

    參考资料 提到參考资料,大家第一感觉就是MSDN,当然我也不例外.这个站点基本上是学习微软技术的首选站点,除了这个站点以外,我还參考了非常多其它的社区和站点,基本上都在.NET 技术社区之我见(英文篇 ...

  5. WPF基础到企业应用系列7——深入剖析依赖属性(WPF/Silverlight核心)

    一. 摘要 首先圣殿骑士非常高兴这个系列能得到大家的关注和支持.这个系列从七月份開始到如今才第七篇,上一篇公布是在8月2日,掐指一算有二十多天没有继续更新了,最主要原因一来是想把它写好,二来是由于近期 ...

  6. C# WPF基础巩固

    时间如流水,只能流去不流回. 学历代表你的过去,能力代表你的现在,学习能力代表你的将来. 学无止境,精益求精. 一.写作目的 做C# WPF开发,无论是工作中即将使用,还是只应付跳槽面试,开发基础是非 ...

  7. WPF 基础面试题及答案(一)

    一 · WPF由哪两部分组成? wpf 由两个主要部分 组成:引擎和编程框架. 1 引擎.wpf引擎是基于窗体的应用程序 图形 视频 音频和文档提供了一个单一的运行时库.重要的是WPF基于矢量的呈现引 ...

  8. WPF笔记(1.1 WPF基础)——Hello,WPF!

    原文:WPF笔记(1.1 WPF基础)--Hello,WPF! Example 1-1. Minimal C# WPF application// MyApp.csusing System;using ...

  9. 浏览器扩展系列————在WPF中定制WebBrowser快捷菜单

    原文:浏览器扩展系列----在WPF中定制WebBrowser快捷菜单 关于如何定制菜单可以参考codeproject上的这篇文章:http://www.codeproject.com/KB/book ...

随机推荐

  1. LightOJ--1152--Hiding Gold(二分图奇偶建图)(好题)

    Hiding Gold Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu Submit Sta ...

  2. 【NOIP 2011】 Mayan游戏

    [题目链接] https://www.luogu.org/problemnew/show/P1312 [算法] 深度优先搜索 [代码] #include<bits/stdc++.h> us ...

  3. Redis Sentinel哨兵配置

    概述 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都 ...

  4. LUA 创建文件和文件夹

    创建文件: os.execute('mkdir e:\\aa') 创建文件夹: os.execute("cd.>e:\\wang.ini")

  5. SQL Server数据库备份的几个建议

    1.定期进行数据备份(完备或差异备份)和日志备份. 2.使用压缩备份来减少磁盘空间占用和提高备份效率. 3.定期检查磁盘剩余空间和备份文件增长情况,以确保有足够空间进行下一次备份. 4.使用校验和(C ...

  6. 三维重建:QT+OpenNI+Kinect图像校正

    后记: 当时能不放弃这个方向是因为这里面涉及了一种很有效的三位场景存储方式,可能给出除图元建模之外的一种三维场景描述方式.这和Flash与位图的对比一样,基于图元的flash始终抵不过基于点描述的位图 ...

  7. C# 把对象序列化 JSON 字符串 和把JSON字符串还原为对象

    /// <summary> /// 把对象序列化 JSON 字符串 /// </summary> /// <typeparam name="T"> ...

  8. CorelDRAW X8超低价优惠啦,你却还在用CDR X4破解?!

    最近大火的<都挺好> 已经完美收官 出于好奇,小编也正在追剧呢 同样出生在畸形的原生家庭 长大后 有钱就是苏明玉 没钱就是樊胜美 所以不要抱怨老天给了你怎样的资源 想要什么就要靠自己的双手 ...

  9. PhotoZoom Pro 7 支持哪些图像格式?

    PhotoZoom是一款新颖的.技术上具有革命性的对数码图片无损放大的工具.为设计工作者提供了优良的解决方案,可快速渲染出完美的放大照片,呈现无与伦比的画质效果.将因其应用的广泛性,所以对图像文件的支 ...

  10. Java并发-J.U.C之AQS

    AQS(Abstract Queue Synchronizer)介绍 [死磕Java并发]—–J.U.C之AQS(一篇就够了) 下面讲解具体的Java并发工具类 1 CountDownLatch 参考 ...