现在,Windows Presentation Foundation(WPF)这个名词已经不再新鲜,至少对很多关注前沿技术的开始人员而是这样的。Windows Vista已经正式发布,新的开发平台.NET Framework 3.0也开始逐步进入到人们的视野之中,并得到了更多的焦点。

   作为下一代的图形系统,WPF所带来的新概念、新的技术也相当的庞大、复杂。现在,在.NET相关领域的开发中,用户界面主要由Windows Forms或者Web Forms实现。虽然Windows Forms已经出现了很多年,也提供了快速、高效的功能。但是,Windows Forms开发的UI界面相对比较单调,而且经过.NET Framework封装后的开发库在自定义和各种底层功能上缺少真正的支持。下面,我们将看看WPF是如何提供一种快速、高效、而且更加震撼的用户界面开 发技术的。

  WPF与Win32、WinForms

  GDI是当今Window桌面应用程序的主流图形库,GDI图 形系统已经形成了很多年。它提供了2D图形和文本功能,以及受限的图像处理功能。虽然在一些图形卡上支持部分GDI的加速,但是与当今主流的 Direct3D加速相比还是很弱小。GDI+开始出现是在2001年,它引入了2D图形的反走样,浮点数坐标,渐变以及单个象素的Alpha支持,还支持多种图像格式。但是,GDI+没有任何的加速功能(全部是用软件实现)。

  熟悉Windows XP和Windows Forms技术的朋友可能都知道,在Windows Forms中也支持一种高级的合成,支持半透明的表单,但是,在Windows Forms中的半透明等技术是伪装实现。比如,显示半透明窗口时,父窗口的背景是通过子窗口实现的。

  在WPF中,引入一种新的图形合成引擎。可以提供更高丰富的图形显示合成,而且不会有任何的窗口闪烁问题。这种新的显示提交引擎与传统的Win32、Windows Forms相比主要有两个优点:

  1)每个窗口元素都可以任意的交替重叠;
  2)所有的合成操作都是在Direct3D中的离屏表面(Off-screen Surface)中实现的;

在这种新的方式中,元素的背景变得不再是必须的。比如,我们希望在窗口中显示一个文字字符串,通常,在Win32或者Windows Forms中显示的效果如同一个静态文本标签一样:它具有系统默认的控件背景色。而在WPF中,文本字符串会直接画到目标位置,而不管目标区域的背景颜 色。

  在Windows Vista中,GDI和GDI+仍然支持,但是基本上没有任何功能性的改进。对GDI和GDI+的改进主要集中在安全性和客户相关问题上。在 Windows Vista中,GDI、GDI+和WPF并行存在,WPF的所有提交都不依赖于GDI和GDI+,而是Direct3D。并且所有的Primitive都 是通过Direct3D的本地接口实现的。WPF系统中milcore组件,它以非托管代码的形式封装了与Direct3D交互的所有功能。由于WPF的 大部分代码都是以托管代码的形式存在的,所以WPF中有很多托管、非托管的交互。当然,在一些图形卡不支持WPF所需要的功能时,WPF也提供了稍微低效 的软件实现来支持在某些PC上运行WPF应用程序。

  在WPF的实现中,每个画图对象都对应于一个离屏表面。显示窗口时不是直接地在屏幕显示区域进行的,而是利用显示卡提供的额外的离屏表面内存。当画图操作在离屏表面中完成了之后,合成提交引擎再把每个需要显示离屏表面合成为一个单独 的可显示表面。这种显示方式不再需要我们用传统的双缓冲绘图来避免窗口闪烁,这项功能已经有WPF默认实现了。

  同时,离屏表面的使用也可以更加方便的利用显示卡GPU(图形处理单元,Graphics Processing Unit)来实现放缩、旋转、变换等等。这也就意味着这些普通的3D功能也能很方便的在WPF中实现了。

   关于离屏表面需要注意一点:不要错误的理解为WPF一定需要使用现代的图形显示卡(具有丰富功能的3D显示卡)。的确,在将来实现真正的3D用户界面是 可能的。但是,WPF做了很大的努力来充分的利用GPU,把3D的元素抽象、封装后,让人们用类似2D的编程来实现3D的功能。

  当前版本的WPF中,对一些Win32功能还没有很好的支持,比如WMF/EMF文件,单个象素宽度的线条等等。对于这些需求还需要使用GDI/GDI+来实现。

未来的GDI:WPF技术纵览[zz]相关推荐

  1. 使用微软WPF技术开发产品优势究竟在那里

    2008年在世界经济历史上是一个不平凡的一年,在这一年中,美国的五大投资银行有两家破产.金融危机席卷全球,美国的失业率在过去的一年从4%飙升到了10%,有些城市的失业率甚至高达20%:加拿大的就业数字 ...

  2. WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放、播放、暂停、可拖动播放进度效果实现...

    WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放.播放.暂停.可拖动播放进度效果实现 原文:WPF技术触屏上的应用系列(三): 视频播放器的使用及视频播放.播放.暂停.可拖动播放进度效果 ...

  3. Forerunner:首个面向“多未来”的推测执行技术

    来源:微软研究院AI头条 编者按:10月26-29日,系统领域的全球顶会 SOSP 2021 在线上举办.在本届大会上,微软亚洲研究院研究员陈洋.郭众鑫.李润怀(实习生,浙江大学).陈硕.周礼栋.张宪 ...

  4. WPF技术触屏上的应用系列(二): 嵌入百度地图、API调用及结合本地数据库在地图上进行自定义标点的实现...

    原文:WPF技术触屏上的应用系列(二): 嵌入百度地图.API调用及结合本地数据库在地图上进行自定义标点的实现 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7操作系 ...

  5. 【区块链与未来】区块链技术将重塑我们的世界

    [区块链与未来]区块链技术将重塑我们的世界 枯叶子 2016-09-13 17:28:25 浏览752 评论0 区块链技术 摘要: 本文是[区块链与未来]的第四篇,也是整个区块链学习的最后一篇,在本文 ...

  6. C#——《C#语言程序设计》实验报告——数据库编程——基于ADO.NET技术和WPF技术的简单数据库可视化工具DEMO

    一.实验目的 掌握ADO .NET数据离线与在线访问模型: 掌握应用LINQ进行数据查询: 继续应用WPF技术进行界面编程. 二.实验内容 使用提供的Northwind.mdb数据库,利用DataGr ...

  7. 如何学习WPF技术?

    本文由长沙DotNET技术社区[邹溪源]整理,共有7544字,阅读需耗时15分钟. 引言 在桌面开发领域,虽然在某些领域,基于electron的跨平台方案能够为我们带来某些便利,但是由于WPF技术能够 ...

  8. 云和恩墨吴涵文:开源将加速成为中国未来发展基础软硬件技术的关键路径

    12月23-24日,2021数据技术嘉年华(DTC)将通过墨天轮社区线上举办.围绕"智能·创新·新生态--数据智领未来 生态共创价值"这一主题,来自数据领域的领军人物.学术精英.技 ...

  9. NB-IoT将成为未来5G物联网主流技术

    日前,我国完成了IMT-2020(5G)候选技术方案的完整提交.据悉,在提交的方案中,NB-IoT技术被正式纳入5G候选技术集合,预计2020年6月ITU将正式宣布5G技术方案的诞生.而NB-IoT也 ...

最新文章

  1. Yolov4性能分析(上)
  2. Matlab图像复原(运动模糊、散焦模糊)
  3. 2021年还适合参加软件测试培训吗
  4. 原子微型结构信息应用到局部图形信息存储的猜想
  5. python异常值处理实例_利用Python进行异常值分析实例代码
  6. maven项目,如何导入本地jar包
  7. Spring Transaction 使用入门 (转)
  8. 多品类适合电商美工收藏|品质页面PSD模板
  9. 打车平台Lyft获Magna 2亿美元投资,携手打造自动驾驶汽车
  10. 常用设计模式——创建型
  11. List 去除重复数据的 5 种正确姿势!
  12. matlab中适应度函数怎么编写,matlab常用的几个适应度评价函数
  13. 计算机处理器i3 i5,realme Book笔记本高清渲染图曝光 配置上搭载11代酷睿i3/i5处理器...
  14. python保存文件名,line 257, in urlretrieve tfp = open(filename, ‘wb‘)OSError: [Errno 22] Invalid argument:
  15. 哈尔滨工业大学 计算机系统大作业
  16. win10系统vs2019 mpich配置
  17. 计算机c盘满了怎么移到d盘去,我电脑里的c盘满了,d盘还有容量,请问怎么把d盘多的容量移到c盘中?就是所谓的分区。...
  18. Connection to the other side was lost in a non-clean fashion
  19. n的阶乘c语言输出为负数,为什么 n 为20 阶乘为负数
  20. 项目管理大法归档 - 思维导图、原型工具、接口测试、设计模式、版本管理、单元测试、持续集成、代码审查、Bug 跟踪

热门文章

  1. 三位数的茎叶图怎么看_人参怎么判断年份,这些点你要了解
  2. 大数据学习笔记50:Flume Channels(Flume通道)
  3. HTML学习笔记:iframe框架演示
  4. 2.图像作为函数 | 图像的量化、大小、类型、位置以及Matlab使用_4
  5. 2017.9.28 降雨量 思考记录
  6. 2017.9.6 音量调节 思考记录
  7. python tornado websocket_Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法...
  8. centos7环境下搭建storm集群
  9. 快速傅立叶变换(FFT)的海面模拟
  10. oracle 数据补齐月份,Oracle自定义函数--增加月份