原文地址:http://tech.it168.com/zx/2007-09-15/200709141320653.shtml

你可能对微软的.NET框架3.0版本的最近的一次更新感到有点奇怪。主版本指出了在平台、工具或技术的一

个主要改变。但是3.0版本纯粹只是2.0版本的一个补充,2.0版本工作的方式没有任何改变,微软只是简单的
增加了一些新的东西。
       不要认为我是错误的,新的功能还很不错。Windows信息基金会为分布计算从C/S和SOA上带来了一致性。并且WWF在工作流方面比以前更加容易理解。从技术角度来说,.NET3.0也包括Windows的卡片服务,这种卡片服务看起来对鉴权和认证方面更加关心,但事实并不是这样,.NET增加的部分可能会引起巨大的版本变更。
一、WPF问世,将带来Windows GUI的全新革命
 
       下面让我们来谈谈WPF(Windows Presentation Foundation),我对WPF有一些复杂的情感,但是有一点是确定的,这是近十年来Windows的图形子系统的一次重大改变,并且它还包括除了核心图形构造和程序API的一些主要的改变。以我的观点来看,WPF是.NET版本改变的一个主要的证据。
WPF的全称是Windows Presentation Foundation,是微软新发布的Vista操作系统的三大核心开发库之一,其主要负责的是图形显示,所以叫Presentation(呈现)。
    WPF作为新的图形引擎,它是基于DirectX的,当然增加了很多新的功能。其2D和3D引擎的强大看看Vista的界面就明白了,再加上其对Aero图形引擎的支持,更加让你感到神奇。
WPF 其实不仅仅是图形引擎,它将给Windows应用程序的开发带来一次革命,因为新的架构提供了一种全新的开发模式。
当然对于普通用户而言,最直观的就是界面越来越漂亮,看起来越来越舒服了;但对于开发人员而言,界面显示和代码将更好的得到分离,这是比较具有革命性的改变之一。还有就是桌面应用程序和浏览器应用程序的融合,根据ms的承诺,正在开发中的WPF/E,即WPF Everywhere版本,将为基于WPF的应用程序提供全面的浏览器支持,这意味着未来开发出的应用程序将可以基于浏览器在不同的操作系统上运行,当然由于目前还在开发中,我们并不确定会不会有一定的限制,根据WPF/E开发组的定义,WPF/E仍然是WPF的子集,而不是后继版本。总体而言,WPF的前景应该是一片光明。
随着Vista RTM的发布,微软新一轮的技术推广已经开始。其实在此之前,WPF已经有很大的推广。当然很多开发人员主要以技术研究为主,也有少数公司已经开始从事基于WPF的产品研发工作。
微软已经在Windows和.NET平台上提供了实质投资的举动是很重大的。这意味着我们最后能够期望逃脱GDI和GID+的限制,并转移到以整个现代的、面向对象的、多线程的、三维的界面技术上面去。GDI是当今Window桌面应用程序的主流图形库,GDI图形系统已经形成了很多年。它提供了2D图形和文本功能,以及受限的图像处理功能。虽然在一些图形卡上支持部分GDI的加速,但是与当今主流的Direct3D加速相比还是很弱小。GDI+开始出现是在2001年,它引入了2D图形的反走样,浮点数坐标,渐变以及单个象素的Alpha支持,还支持多种图像格式。但是,GDI+没有任何的加速功能(全部是用软件实现)。
二、WPF新技术层出不穷
在WPF中,引入一种新的图形合成引擎。可以提供更高丰富的图形显式合成,而且不会有任何的窗口闪烁问题。这种新的显式提交引擎与传统的Win32、Windows Forms相比主要有两个优点:
1)所有的每个窗口元素都可以任意的交替重叠。
2)所有的合成操作都是Direct3D中的离屏表面(Off-screen Surface)中实现的。
WPF将最好的Windows的GUI技术整合在一起,以及用来描述UI布局的Web的使用拼接在一起。
       但是,在我们为之兴奋之前,请记住WPF本身还只是在1.0版本的技术。在成熟度和技术方面,你可以想象一下VB1.0版本。它是一种非常有意思的技术,在未来有很好的发展潜力,但是如果你现在就想用的话很可能会面对很多严重的问题。
       WPF使用一种基于XML的语言来定义用户界面从而完成上述的工作。这种语言被称为XAML,XML应用程序标记语言。XAML是WPF的声明性语言,提供对界面、文档以及多媒体等界面层逻辑的渲染。而且XAML可以直接在IE中打开。我认为,如果一定需要通过学习XAML来使用WPF的话那么这种技术就是失败的。通过这种测量我们知道,当前发布的WPF做的并不是很好。在Visual Studio的下一个版本将会内置XAML的支持,并且它们是以一种Blend表达式的方式支持的,一个为了创建更漂亮的界面的工具是一个能吸引住设计师的工具,但是任何工具在它们的1.0版本的时候都不够好,WPF1.0不够好的原因是因为它使得开发人员必须去学习XAML。
       Visual Studio“Orcas”为开发者对XAML的操作提供了一个环境,但是很多常用的操作必须通过手动操作XAML。Blend表达式使得界面布局和设计在没有手动输入XAML的情况下变得可能,但是应用概念例如数据绑定还是很可怕的。
       这并不令人觉得惊讶,XAML对Postscript和HTML都是相似的:它是工具使用的一种语言,而不是人类使用的语言。在Postscript的早期,很多用户必须学习这门语言并且手写Postscript程序来控制打印机。相似地,在书写基于Web的应用程序时,我们在编程的前几年需要学习HTML。需要开发人员来学习一些旁枝末节的东西来学习一种技术的,这是一种不成熟技术的体现,这是我们成为比较早的学习者必须付出的代价。
       我很期待我们将会看到WPF和它的工具在以后的几年能很快地成熟起来。从历史观点来说,3.0版本的任何技术,在主流采用变得很值得的情况下,成熟度达到了集成和非常值得关注的程度。从个人观点来说,我希望WPF跟上这个趋势,达到这个点,因为它是一种很酷的技术。
       如果你想是个追逐新技术的人,并且你想要花费时间和金钱在你可能要面临的问题上,WPF现在很值得你去探索。即使你对追逐新技术持保守态度,WPF也是一项你需要紧密关注的技术。它表示了Windows的界面编程的未来,并且还可能成为Web界面编程的未来。经过几年后,我们将会对没有WPF的日子觉得奇怪。

WPF会重写Windows GUI的历史吗?的更多相关文章

  1. 开源自己用python封装的一个Windows GUI(UI Automation)自动化工具,支持MFC,Windows Forms,WPF,Metro,Qt

    首先,大家可以看下这个链接 Windows GUI自动化测试技术的比较和展望 . 这篇文章介绍了Windows中GUI自动化的三种技术:Windows API, MSAA - Microsoft Ac ...

  2. WPF程序在Windows 7下应用Windows 8主题

    这篇博客介绍如何在Windows 7下应用Windows 8的主题. 首先我们先看一个很常见的场景,同样的WPF程序(样式未重写)在不同的操作系统上展示会有些不同.这是为什么呢?WPF程序启动时会加载 ...

  3. Robot Framework + Pywinauto 框架实现Windows GUI Automation

    Robot Framework is a generic test automation framework for acceptance testing and acceptance test-dr ...

  4. 基于WPF的酷炫GUI窗口的实现全过程

    title: 基于WPF的酷炫GUI窗口的实现全过程 date: 2020-08-14 permalink: /build/wpfgui sidebarDepth: 2 tags: wpf gui 软 ...

  5. AutoIt操作Windows GUI实现文件上传

    AutoIt 一个使用类似BASIC脚本语言的免费软件,用于Windows GUI(图形用户界面)中进行自动化操作.它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务. 官方网站: htt ...

  6. 用Nim语言开发windows GUI图形界面程序

    前言 本文得到了“樂師”的大力支持, 我们一起调试程序到深夜,要是没有他的帮忙, 我不知道要多久才能迈过这道坎, 另外“归心”还有其他人也提供了帮助, 他们都来自于QQ群:“Nim开发集中营”4693 ...

  7. Windows GUI代码与Windows消息问题调试利器

    Windows GUI代码与Windows消息问题调试利器 记得很久前有这么一种说法: 人类区别于动物的标准就是工具的使用.同样在软件开发这个行业里面,对于工具的使用也是高手和入门级选手的主要区别,高 ...

  8. windows gui测试工具:AutoIt

    windows gui测试工具:AutoIt 2017-01-09 目录 1 简介2 示例1 记事本自动化操作3 示例2 上传文件 1 简介 返回 AutoIt v3 是用以编写并生成具有 BASIC ...

  9. A Windows GUI for Appium

    A Windows GUI for Appium If you are new to Appium then please see the Getting started guide for more ...

随机推荐

  1. crontab 定时任务 每过多少分钟执行

    被下面的问题纠结了一会 记录一下以备提醒 每过5分钟执行 */ * * * * curl localhost/system/dns/dnns.php?ac=ToDNS 每小时的第五分钟执行 0 * * ...

  2. LCA在线算法ST算法

    求LCA(近期公共祖先)的算法有好多,按在线和离线分为在线算法和离线算法. 离线算法有基于搜索的Tarjan算法较优,而在线算法则是基于dp的ST算法较优. 首先说一下ST算法. 这个算法是基于RMQ ...

  3. js 高阶函数 map reduce

    map() var arr = [1,3,4]; function a(x){ return x*x; } //map可以将一个函数作为参数执行,将数组中的值,依次使用a函数处理: return ar ...

  4. SQL Server 事务、异常

    转自: http://www.cnblogs.com/moss_tan_jun/archive/2011/11/26/2263988.html   事务 在数据库中有时候需要把多个步骤的指令当作一个整 ...

  5. 从创建webservice到发布webservice的一些相关总结

    最近做了一个web服务,开始什么也不懂,就在网上到处找,对于刚毕业的我,感觉没用实际代码经过自己的手写出来,看什么都一头雾水,然后就看到很多人说webservice已经融入WCF..然后就先创建了WC ...

  6. 处理移动端click事件300ms延迟的好方法—FastClick

    下载地址:https://github.com/ftlabs/fastclick 1.click事件为什么有延迟? “...mobile browsers will wait approximatel ...

  7. MVC打包压缩JS&CSS文件调试时过滤了一些文件

    BundleTable.这个确实是比较好用,打包并压缩了CSS,使之加载时减少流量. 但是在调试的时候会疑问为何有很多JS,CSS文件无法打包,其实是因为调试时VS自动过滤了如下文件:   后台跟踪了 ...

  8. VS 创建 使用C++ 静态类库(Dll)

    创建静态类库 Walkthrough: Creating and Using a Dynamic Link Library (C++) 1:菜单栏-->File, New, Project. 2 ...

  9. Looper Handler MessageQueue Message 探究

    Android消息处理的大致的原理如下: 1.有一个消息队列,可以往队列中添加消息 2.有一个消息循环,可以从消息队列中取出消息 Android系统中这些工作主要由Looper和Handler两个类来 ...

  10. Simple screenshot that explains the singleton invocation.

    Here is the code: /* Some class,such as a config file,need to be only one.So we need to control the ...