2024年2月6日发(作者:)

Visual Studio 2010新特性

新特性之自定义开始页

Visual Studio 2010的开始页由一个文件控制,通过编辑这个文件,我们可以在我们的这“一亩三分地”上任意耕种,我们可以添加内容,添加按钮执行某些功能,甚至可以添加一些自定义的控件完成一些特殊的任务等等。总之,自定义的开始页很好很强大,可以说,自定义开始页是Visual Studio 2010带个程序员们的一份见面礼。Visual Studio 2010默认的开始页包括可以查看新闻,打开项目文档,反馈问题,打开项目等等。

俗话说,好的开始是成功的一半。自定义开始页是如此强大,可以帮助我们完成很多常见的任务,给我们的开发工作带来极大的便利。

新特性之多显示器支持

随着现代应用程序规模越来越大,开发工具越来越复杂,需要同时处理的信息也越来越多,多显示器已经成为我们开发工作的实际需要了。常常我们希望能够一边编写代码,一边能够直观地看到界面的变化,同时我们还想开着搜索引擎查找资料等等。面对这么复杂的应用,如果我们只有一个显示器,我们就需要在各个窗口之间切换,这无疑会影响开发的效率。如果我们可以拥有多个显示器,我们就可以在桌面上放置更多的窗口,这些工作就可以真正的同步进行了。减少窗口的切换,无形中会提高我们的开发效率。

另外,因为显示器成本的降低,使得一个程序员配备多个显示器成为一种现实的可能。

所以,现在越来越多的程序员开始拥有两台甚至多台显示器。程序员们的默认装备,由原来的主机+显示器开始逐渐变为笔记本+显示器。这样,一个程序员比较可以使用笔记本的小屏幕,还可以使用独立的一个较大尺寸的显示器,极大地方便了开发工作。正是为了适应这种趋势,Visual Studio 2010添加了对多显示器的支持。

在多显示器环境下,我们可以把VS2010中的多个窗口布置在不同的屏幕上。比如我们可以将代码编辑器放置在主显示器中,将输出窗口,类图窗口,代码定义窗口等等提供辅助信息的窗口放置在副显示器中,这样我们就可以在主窗口中编辑代码,同时有需要的时候,可以及时地从辅助窗口中得到一些有用的辅助信息。可以想象,多显示器可以极大的提高我们的开发效率。

在Visual Studio 2010中,微软使用Windows Presentation Foundation (WPF)重新打造了IDE。得益于WPF的强大功能,除了能够很好地支持多显示器外,VS2010的IDE同时还具备了很多很酷的功能。比如:

启用WPF Shell

因为WPF Shell这部分功能还正在开发之中,所以即使是作为技术预览的CTP版本,默认情况下WPF Shell的功能也是关闭的,我们必须通过修改注册表来启用WPF Shell。

在注册表中添加如下注册表键值:

HKEY_CURRENT_USERSoftwareMicrosoftVisualStudio10.0GeneralEnableWPFShell (REG_DWORD) = 1

但Visual Studio启动的时候,它会检查这个注册表键值,如果为1,则启用WPF

Shell。

浮动窗口

为了体验VS2010中基于WPF的新IDE,我们新创建一个Visual C#项目,选择“Windows Forms Application”作为项目模板。项目创建完成后,我们在解决方案浏览器(Solution Explorer)中找到,然后右键单击这个文件,在弹出的上下文菜单中我们选择“View Code”打开代码编辑器。我们可以通过拖拽代码编辑器的标题栏,将代码编辑器拖动到合适的位置,在同一个屏幕中同时显示窗体编辑器和代码编辑器。

多窗口即时更新

在VS2010中,多个相关联的窗口不仅能够同时显示,还能够实现多个窗口的即时更新。比如我们在窗体编辑器中对这个窗体Form1进行编辑的时候,可以同时看到和这两个相关的代码文件的即时更新。我们在窗体编辑器中对窗体的修改,都能够即时的反应到代码文件中。比如我们在窗体上添加一个按钮控件,我们就能够同时看到中添加了相应的代码;当我们双击这个按钮控件,就可以看到中添加了相应的单击事件函数。

代码编辑器的无级缩放

由于使用了WPF,VS2010可以实现代码编辑器的无级缩放。我们可以按住Ctrl键,然后使用鼠标滚轮对代码编辑器进行缩放。这种缩放的方式,相对于以前那种通过修改字体字号来改变代码文字大小的方式,方便了很多,操作起来更加人性化。代码缩放的功能虽然简单,但是非常实用:但代码较长的时候,我们可以通过缩放代码,对代码快速的定位,找到需要编辑的位置。

清新的代码选择

在VS2010中,它充分地利用WPF在UI上的优势,其中经过美化的代码选择就是一个很好的例子。在VS2010中,代码的选择不再是一整片的反色显示,而是非常漂亮的半透明渐变显示,让整个代码选择非常清新自然,同时也更加醒目。

总体而言,除了WPF Shell未完工的部分图标、菜单显得很“丑陋”之外,整个VS 2010的IDE使用起来非常“舒服”。让人觉得使用VS2010做开发是一种享受。

新特性之IDE的调用继承树

写程序离不开调试,调试离不开理清程序的执行流程。在以前的Visual

Studio版本中,我们几乎都是调试的时候通过调用栈来查找函数间的调用关系,帮助调试的。调用栈虽然好用,但是只能在调试时使用,同时也只能串行,只有一条执行路径。另外,随着现代应用程序越来越复杂,调用栈已经无法满足我们分析程序逻辑的需要。所以在Visual Studio 2010中,微软为我们提供了新的程序逻辑分析工具:调用继承树(Call Hierarchy)窗口。

在调用继承树窗口中,我们可以像“爬树”一样,在这棵调用继承树的各个节点和对应的代码之间任意跳转。

新特性之支持TDD

在传统的软件开发模式中,我们总是先根据需求编写代码,然后再编写测试程序对其进行测试。这常常使得开发人员在项目的开发后期陷入痛苦的泥潭:当测试程序发现问题后,还要回头再修改当初已经实现的某个类,或者对已经定义好的函数接口进行修改或者扩展。为什么会发生这样的事情呢?这是因为这部分代码的使用需求没有很好的描述。我们在设计类和函数的时候,没有很好的对它们的使用情况进行分析,最终导致代码无法满足测试程序中对代码的使用需求。 为了挽救痛苦挣扎的开发人员,测试驱动开发(Test-Driven Development,

TDD)通过编写测试程序,先考虑代码的使用需求(包括功能、过程、接口等),而且这个描述是可执行验证的。通过编写这部分代码的测试程序,对其功能的分解、使用过程、接口都进行了设计。而且这种从使用角度对代码的设计通常更符合后期开发的需求。

测试驱动开发开始流行于20世纪90年代,是极限编程中倡导的程序开发方法之一,其主要思想就是先写测试程序,然后再实现代码使其通过测试。在TDD产生之初,曾经被当做程序员们的救命稻草而受到众人追捧。但是后来在实践过程中人们逐渐发现,由于缺乏相应的开发工具的有力支持,TDD的实施变得困难重重:无法高效地编写测试程序;测试程序写好后,无法自动生成代码框架,开发人员还要用大量的时间来编写实现代码。这些现实的因素都

困扰着TDD的发展,让大家有一种TDD“看上去很美”的感觉。

现在,Visual Studio 2010的即将到来,可以让坚守TDD的开发人员们欢呼了:VS2010的“即用即产生”特性,可以让我们根据测试程序,根据代码的使用情况,快速地反向生成相应的代码。可以说,“即用即产生”特性,给TDD插上了腾飞的翅膀。有了“即用即产生”功能,Visual Studio 2010中的TDD真如“行云流水”般顺畅。

新特性之支持Office

一位漂亮的OL把Word当做文字处理软件来使用,这无可厚非;但是如果一位帅气的Developer也仅仅把Word当做文字处理软件来使用,恐怕会被同行耻笑。在程序员的眼中,Office不仅仅是一套非常流行的办公软件,更是一个成熟的开发平台。Office的应用是如此广泛,几乎深入到企业信息化和个人文档处理的每个角落。通过Office开发,可以帮助企业或者个人完成很多重复性的工作,规律性的工作甚至创造性的工作,正是因为如此,Office开发在软件开发中显得越来越重要,已经成为商业软件开发的一个重要领域。

Visual Studio 2010 CTP中,它提供了很多新的特性,来解决Office开发中的主要问题,以更好地支持Office开发。当然,这些特性也可以应用在其他场合。这些新的特性包括:

动态编程

在前面我们曾经介绍过,C# 4.0中引入了一种新的静态类型dynamic,这使得我们在使用COM进行Office开发的时候,无需再进行复杂而繁琐的对象类型转换。

可选参数

Office提供的函数往往有很多参数,在大多数情况下,很多参数使用默认值就可以了,无需全部指定。但是在C# 3.0中,因为它不支持可选参数,

导致每次调用函数都必须给定全部参数,代码繁琐而臃肿。C# 4.0通过对可选参数的支持,很好地解决了这一问题。

No-PIA部署

以前的Office开发,都要求目标机器(用户机器)上同样安装了Office,有时甚至对Office的版本还有特殊的要求。这给Office程序的部署带来了极大的困难:目标机器千差万别,有的安装了Office,有的没有安装,安装了Office的机器,Office版本又各不相同。在Visual Studio 2010中,因为有了No-PIA部署的支持,这些问题都得到了很好的解决。有了上述特性的支持,Visual

Studio 2010中Office开发开始变得简洁而自然。现在,我们就可以轻松地把应用程序部署到目标机器上,而不用去考虑目标机器上是否安装了Office,Office的版本是多少等等繁琐的问题。

新特性之 Quick Search

随着业务的发展,Visual Studio所需要处理的问题也越来越复杂,这就使得一个解决方案中的代码数量大大增加。一个代码文件,动辄上千行,数万行也是常见的事情。我们常常在编写新代码的时候,已经忘记了几天前,几周前,甚至几个月前写的代码是如何实现的。当我们需要回顾以前的代码,参考其实现或是对其进行维护的时候,就需要我们在代码中进行查找(Find)和搜索(Search)。当然,Visual Studio作为一个成熟的开发工具,它的代码编辑器一开始就拥有了查找功能,同时还在后继的不断版本更新中,添加了很多高级的查找功能,比如支持通配符,正则表达式等等。但是,查找功能始终都是进行“精确”的匹配。我知道,程序员们的记性都不太好,如果我们只对要查找的结果有个模糊的印象,那么查找起来将比较困难。为了方便健忘的程序员们在纷繁的代码中进行快速地查找定位,Visual Studio 2010提供了“Quick Search”功能。

我们注意到,新功能的名字是“Quick Search”而不是“Quick Find”,Search和Find的差别,就是你可以根据蛛丝马迹,只言片语进行“Search”,但是无法用这些信息进行“Find”。搜索,是一种模糊查找,一种更高形式的查找。

在Visual Studio 2010中,我们可以通过在任何代码文件中使用快捷键“Ctrl + ,”(Ctrl键加上逗号键)调出“Quick Search”窗口。

我们可以在搜索框中输入任意的字符作为搜索条件,Visual Studio就会替我们在项目中搜索相关联的符号,类型,成员名称等等,同时将搜索结果动态地显示在窗口下方的搜索结果列表中。我们可以不断地更换搜索条件,直到找到我们想要的结果为止。

VS2010针对开发语言方面的提升

新特性之C# 4.0中的动态类型和动态编程

随着WEB开发的大行其道,各种动态语言也借着这股东风,蓬勃发展起来。在软件开发界,动态语言正在被越来越多的的人所接受和使用,在CSDN所做的2007年读者大调查中,动态语言在开发人群中的受关注程度竟然达到12%。而在 TIOBE的排名中,动态语言竟然占有了前十名中的六个席位(包括PHP、Python、Perl和 JavaScript,在加上越来越动态的Java和C#)。

“未来属于动态语言”似乎正在从一个预言成为一个现实。C#自然不会错过这种技术发展确实,她正在通过不断引入新的动态预言的特性,使自己变得越来越美丽“动”人。

C#编译器允许你通过dynamic对象调用任何方法,即使这个方法根本不存在,编译器也不会在编译的时候报编译错误。只有在运行的时候,它才会检查这个对象的实际类型,并检查在它上面GetName()是什么意思。动态类型将使得C#可以以更加统一而便利的形式范围下列对象:

• a. 来自动态编程语言——如Python或Ruby——的对象

• b. 通过IDispatch访问的COM对象

• c. 通过反射访问的一般.NET类型

• d. 结构发生过变化的对象——如HTML DOM对象

当我们得到一个动态类型的对象时,不管它是来自COM还是IronPython、HTML DOM还是反射,只需要对其进行操作即可,动态语言运行时(DLR)会帮我们指出针对特定的对象,这些操作的具体意义。这将给我们的开发带来极大的灵活性,并且能够极大程度上地精简我们的代码。

新特性之支持C++新标准C++0x

在新的Visual Studio 2010中,引入了4个重要的C++新特性。号称C++0x的“四大天王”。这些新特性的引入,必将给C++注入新的活力。

Lambda表达式

很多编程编程语言都支持匿名函数(anonymous function)。所谓匿名函数,就是这个函数只有函数体,而没有函数名。Lambda表达式就是实现匿名函数的一种编程技巧,它为编写匿名函数提供了简明的函数式的句法。同样是Visual

Studio中的开发语言,Visual Basic和Visual C#早就实现了对Lambda表达式的支持,终于Visual C++这次也不甘落后,在Visual Studio 2010中添加了对Lambda表达式的支持。

Lambda表达式使得函数可以在使用的地方定义,并且可以在Lambda函数中使用Lambda函数之外的数据。这就为针对集合操作带来了很大的便利。在作用上,Lambda表达式类似于函数指针和函数对象,Lambda表达式很好地兼顾了函数指针和函数对象的优点,却没有它们的缺点。相对于函数指针或是函数对象复杂的语法形式,Lambda表达式使用非常简单的语法就可以实现同样的功能,降低了Lambda表达式的学习难度,避免了使用复杂的函数对象或是函数指针所带来的错误。

静态断言static_assert

在之前的C++标准C++03中,我们可以使用两种断言:

• 使用预处理中的条件编译和#error指令,可以在预处理阶段检查一些编译条件

• 可以使用宏assert来进行运行时检查,以确保程序逻辑的正确性

但使用#error方法是非常烦琐的,并且不能够对模板参数进行检查,因为模板实例化是在编译时进行,而#error方法是在预处理阶段进行的。而assert宏是在运行时进行检查。不难发现,我们缺少了一样东西,那就是可用于在编译时检查的工具。于是,静态断言应运而生。

在新的C++标准C++0x中,加入了对静态断言的支持,引入了新的关键字static_assert来表示静态断言。使用静态断言,我们可以在程序的编译时期检测一些条件是否成立,这个特性在调试模板函数的模板参数时特别有用。在编译的时候,模板函数实例化,这时我们就可以使用静态断言去测试模板函数的参数是否按照我们的设计拥有合适的值。

另外,静态断言还带来很多其他的优势。例如静态断言在编译时进行处理,不会产生任何运行时刻空间和时间上的开销,这就使得它比assert宏具有更好的效率。另外比较重要的一个特性是如果断言失败,它会产生有意义且充分的诊断信息,帮助程序员快速解决问题。

auto关键字

在C++0x中,auto关键字的意义发生了改变。从Visual C++ 2010开始,auto关键字将用于指引编译器根据变量的初始值来决定变量的数据类型。换句话说,我们可以把auto当成一种新的数据类型,它可以“从初始化器(initialize)中推导出所代表的变量的真正类型”。这种对auto关键字的使用方式可以大大消除当前替代方式所导致的冗长和易出错的代码。

另外,跟其他数据类型一样,我们也可以对auto关键字进行修饰,例如添加const,指针(*),左值引用(&),右值引用(&&)等等,编译器会根据auto类型所代表的真正的数据来决定这些修饰的具体含义。

为了兼容一些旧有的C++代码,我们可以使用/Zc:auto这个编译器选项,来告诉编译器是采用auto关键字的原有定义还是在新标准C++0x中的定义。

右值引用

作为最重要的一项语言特性,右值引用(rvalue references)被引入到 C++0x中。我们可以通过操作符“&&”来声明一个右值引用,原先在C++中使用“&”操作符声明的引用现在被称为左值引用。

int a;

int& a_lvref = a; // 左值引用

int b;

int&& b_rvref = b; // 右值应用

左值引用和右值引用的表现行为基本一致,它们唯一的差别就是右值引用可以绑定到一个临时对象(右值)上,而左值引用不可以。例如:

int& a_lvref = int(); // error C2440: 'initializing' : cannot convert from 'int' to

'int&'

int&& b_rvref = int(); // OK!

在第一行代码中,我们将一个临时对象int()绑定到一个左值引用,将产生一个编译错误。而在第二行中,我们将临时对象绑定到右值引用,就可以顺利通过编译。

右值是无名的数据,例如函数的返回值一般说来就是右值。当对右值进行操作的时候,右值本身往往没有必要保留,因此在某些情况下可以直接“移动”之。通过右值引用,程序可以明确的区分出传入的参数是否为右值,从而避免了不必要的拷贝,程序的效率也就得到了提高。我们考虑一个简单的数据交换的小程序,从中来体会右值引用所带来的效率提升。我们可以写一个函数swap来实现两个变量值的交换:

template swap(T& a, T& b)

{

T tmp(a); // tmp对象创建后,我们就拥有了a的两份拷贝

a = b; // 现在我们拥有b的两份拷贝

b = tmp; // 现在我们拥有a的两份拷贝

}

在这段代码中,虽然我们只是为了进行简单的数据交换,但是却执行了多次对象拷贝。这些对象的拷贝操作,特别是当这些对象比较大的时候,无疑会影响程序的效率。

那么,如果使用右值引用如何实现呢?

// : Defines the entry point for the console application.

//

#include "stdafx.h"

template

T&& move(T&& a)

{

return a;

}

template void swap(T& a, T& b)

{

T tmp(move(a)); // 对象a被移动到对象tmp,a被清空

a = move(b); // 对象b被移动到对象a,b被清空

b = move(tmp); // 对象tmp被移动到对象b

}

int _tmain(int argc, _TCHAR* argv[])

{

int a = 1;

int b = 2;

swap(a, b);

return 0;

}

在这段重新实现的代码中,我们使用了一个move()函数来代替对象的赋值操作符“=”,move()只是简单地接受一个右值引用或者左值引用作为参数,然后直接返回相应对象的右值引用。这一过程不会产生拷贝(Copy)操作,而只会将源对象移动(Move)到目标对象。

正是拷贝(Copy)和移动(Move)的差别,使得右值引用成为C++0x中最激动人心的新特性之一。从实践角度讲,它能够完美是解决C++中长久以来为人所诟病的临时对象的效率问题。从语言本身讲,它健全了C++中的引用类型在左值右值方面的缺陷。从库设计者的角度讲,它给库设计者又带来了一把利器。而对于广大的库使用者而言,不动一兵一卒便能够获得“免费的”效率提升。

在Visual Studio 2010中,因为有了对这些C++0x新特性的支持,重新点燃了程序员们对C++的热情。

新特性之IDE增强

软试图将Visual Studio 2010打造成跟Visual Studio 6一样的经典开发工具。所以,除了在语言层面开始支持最新的C++标准外,在IDE以及MFC库等方面,微软也下了很大的力气。Visual C++不仅改善了IDE的效率,同时也引入了很多新的特性,期待这些IDE增强能够切实的提高程序员们的开发效率。

Visual Studio 2010中的Visual C++增强主要包括以下几个方面:

改进的项目系统支持

在上一回我们提到过,在以往的Visual Studio版本中,MSBuild不能很好地支持Visual C++项目,微软转而提供了一个替代的专门解决办法:VCBuild。在Visual Studio 2010中,微软终于改进了这一点,将VCBuild的众多特有的功能集成到MSBuild中,并且使用MSBuild替代了VCBuild。虽然VCBuild有很多针对Visual C++项目的实用功能,但是,新的MSBuild不仅继承了这些功能,还提供了更多的新特性,吸引用户升级到这一新的构建平台上来:

• 诊断功能: MSBuild增强了它的诊断功能,以帮助用户更加容易地发现和调试构建错误。例如,MSBuild可以帮助你决定如何以特定的顺序编译某些源文件,因为MSBuild可以检测这些文件之间的依赖性。

• 可扩展性: 使用MSBuild,用户可以为某些特定的平台构建不同的解决方案。另外,也可以在构建过程中,使用不同版本的编译器。连接器等,使得我们的解决方案更具扩展性。

• 集成: 我们可以将我们的Visual C++项目添加到一个已经存在的MSBuild环境中。例如,我们可以将一个新的Visual C++项目集成到一个已经存在的MSBuild环境中,虽然这个MSBuild环境包含的是使用.NET Framework的Visual C#和Visual Basic项目。

Multi-Targeting曾经作为Visual Studio的一个重要特性,受到微软的大力推广。因为它使得“一次编码,多个平台运行”成为可能。这一特性给程序员们带来了极大的便利,再也不用为目标机器混乱的平台而头疼。但是在之前的Visual Studio中,Multi-Targeting特性只在托管语言中得到支持,可以针对不同的.NET Framework版本。现在在Visual Studio 2010中,随着MSBuild的应用,本地代码的Multi-Targeting也成为可能。

在Visual Studio 2010中,我们可以选择使用Visual Studio 2010的工具集还是Visual Studio 2008的工具集。当我们因为一些兼容性或者是其他方面的原因不愿过早地升级到Visual Studio 2010时,我们可以利于Multi-Targeting特性,选择使用Visual Studio 2008的Visual C++程序库和编译器,而同时使用Visual

Studio 2010的IDE。这样就实现了“鱼与熊掌兼得”。当我们最终决定升级到Visual

Studio 2010的程序库和编译器时,只需要在MSBuild或是项目属性中做一个简单的设置就可以了。

改进的Visual Studio用户体验

相信很多使用Visual Studio作为开发工具的Visual C++程序员都会怀恋使用Visual C++ 6.0的日子。Visual C++ 6.0配合着Visual Assist这个辅助工具,成为C++程序员们开发工具的不二之选。随着Visual Studio版本的升级,IDE引入了一些新的特性,但是却使得整个IDE非常臃肿,效率低下。现在,Visual

Studio 2010在IDE的效率方面做了很多工作,以提高我们的开发效率:

• 头文件编辑

在以往的Visual Studio中,如果我们编辑一个被多处源文件引用的头文件,Visual Studio将不得不打断你的工作,因为它要很长的时间重新处理整个项目。现在,在新的Visual Studio 2010中,当我们编辑头文件后,我们可以继续工

作,而Visual Studio会在后台进行新的头文件的处理,同时IntelliSense也将很快更新,反应出我们对头文件的修改。

• 改变项目配置

跟头文件编辑相似,在以往的Visual Studio中,当我们改变了项目的配置后,Visual Studio会打断我们的工作去处理项目配置的改变。例如,当我们将当前的项目配置从Debug切换到Release后,Visual Studio会花很长一段时间去处理项目配置的改变,而在这段时间内,Visual Studio就像死掉一样,我们什么都不能做,只能傻等着。(我曾经无奈地把它当做Visual Studio的一个人性化设计,故意让我们这些久坐的程序员在等待的时候起来走走,舒活一下筋骨。)在新的Visual Studio 2010中,修改项目配置后我们无需再等待就可以继续工作。

• 配置项目的物理分布

你的项目是否非常庞大,包含很多源文件?如果是这样的话,在以往的Visual Studio 中,当它处理项目的所有文件时,将显得非常缓慢。为了解决这个文件,我们往往不得不将一个项目拆分成多个项目,这样每个项目中的源文件就会少很多,Visual Studio每次处理的文件数少一些,就会显得快一点。在新的Visual Studio中,它提高了处理源文件的效率,即使你的项目有很多源文件,Visual Studio在处理这些文件的时候,仍然可以保持活动而不会出现“假死”的现象。这个特性可以使得我们将原来需要分布在多个项目中的源文件,根据需要重新配置,使得项目的物理分布更加合理。

• 更加聪明的IntelliSense(智能感知)

C++作为最复杂的编程语言,其IntelliSense一直是Visual Studio的一个难点。在以往的Visual Studio中,C++的IntelliSense是基于编译器的,它可以理解复杂的C++代码。但是,对于一些比较高级的C++代码,特别是跟宏相关的一些内容,IntelliSense就显得无能为力了。在新的Visual Studio中,改进的IntelliSense显得更加聪明,几乎可以理解任何复杂形式的C++代码。有了新的IntelliSense,估计很多程序员所钟爱的Visual Assist会受到冷遇了。

增强的MFC

虽然大家都在说MFC过时了,但是,现在世界上还有很多MFC正在运行,也同样还有很多基于MFC的程序正在开发中。我们可以说随着.NET

Framework等等新框架的推出,MFC不再是几乎唯一的选择,但是,随着Visual

C++ Feature Pack的推出,MFC在界面开发方面的能力等到了大大增强,MFC也在与时俱进,远没有到过时淘汰的程度。在Visual Studio 2010中,除了之前随着Visual C++ Feature Pack发布的众多特性外,MFC又带来了两项重要的特性:

• 任务对话框CTaskDialog

为了改善用户体验,在Vista中,微软使用任务对话框(Task Dialog)代替了原先广泛使用的消息框(Message Box)。跟消息框相比,任务对话框不仅可以向用户显示消息,还可以显示自定义的按钮,命令行选项以及更加丰富的辅助信息等。新的CTaskDialog类提供了很多简单实用的函数,程序员们可以轻松上手,使用任务对话框来改善应用程序的用户体验,使自己的应用程序的界面风格跟Vista系统保持一致。

• Restart Manager Support

在新的Vista Studio 2010中,MFC程序开始支持重启管理器(Restart

Manager)。重启管理器是Vista所引入的一个重要新特性,它可以在程序意外崩溃的时候,保护用户任何未保存的文档数据等。当我们的程序因为种种原因意外崩溃的时候,重启管理器可以重新启动应用程序并且可以让用户选择是否要恢复未保存的数据等。使用重启管理器,可以有效地降低我们数据丢失的风险,极大地改善程序的抗风险能力。

在Visual Studio 2010中,我们可以通过简单地在程序初始化的地方添加几行代码,就使得我们的应用程序具有重启管理器的功能。

Visual C++程序的发布与部署

新的Visual Studio 2010改变了依赖于Visual C++库的应用程序的发布方式。依赖于Visual C++库的应用程序不再需要Fusion (WinSxS) Manifest,这意味着当

我们将应用程序部署到一个本地文件夹时,将不再需要众多的小Manifest,只需要复制MFC和C++运行时库和 这两个dll文件到Release文件夹就可以了。另外,Visual Studio 2010也同样支持之前的各种部署机制,例如合并模块(.msm)和VCRedist。这些旧有的方法将在System32目录下安装Visual C++库。

新特性之创建华丽Ribbon界面

随着Office 2010的发布,它改变了以往传统的下拉式菜单用户界面,取而代之的是全新的被称之为“Ribbon”的固定式工具栏界面。微软声称这种新的用户界面能够使用户更容易地使用软件的各项常用功能,例如Word 2010中的保存,设置格式,插入图片等常用功能,都可以从Ribbon界面快速地访问到,从而提高用户的生产效率。

虽然很多用户还在抱怨“不习惯Ribbon界面”、“很多功能找不到位置”等等,但是,随着微软的“强制”推行,Ribbon界面也在越来越被人们所接受,很多应用软件也开始采用Ribbon界面。更重要的是,在即将到来的Windows 7中,操作系统本身更是大量地应用了Ribbon界面。不管我们愿意或者不愿意,Ribbon界面开始大张旗鼓地攻占我们的软件界面,成为继下拉式菜单后新的标准用户界面。作为用户,我们需要逐渐熟悉这种新的软件用户界面;而作为开发者,更是需要了解和认识这种新的软件用户界面,新的交互方式,从而利于这种新界面的优势,为用户提供更加优秀的软件。

Windows平台的进化,往往都伴随着系统图形界面的重新设计。从Windows XP到Windows Vista,最大的革新就是Windows Aero的引入。而在微软的下一代Windows平台Windows 7中,虽然Aero被保留下来,但是Windows 7的图形用户界面更多的是朝着Office 2010相同的方向前进,无论是系统自带的工具软件,例如画图、写字板等,还是上层的第三方应用软件,例如Office 2010、AutoCAD、SnagIt等等,都全面应用了Ribbon界面。

跟传统的菜单式用户界面相比较,Ribbon界面的优势主要体现在如下几个方面:

• 所有功能有组织地集中存放,不再需要查找级联菜单、工具栏等

• 更好地在每个应用程序中组织命令

• 提供足够显示更多命令的空间

• 丰富的命令布局可以帮助用户更容易地找到重要的,常用的功能

• 可以显示图示,对命令的效果进行预览,例如改变文本的格式等

• 更加适合触摸屏操作

虽然从菜单式界面到Ribbon界面有一个漫长的熟悉的过程,但是一个不争的事实是,Ribbon界面正在被越来越多的人接受,相应的,越来越多的软件开发商开始抛弃传统的菜单式界面,转而采用Ribbon界面。Visual Studio

2010作为面向下一代Windows平台的开发工具,自然是对Ribbon界面全面支持。

VS2010与以往版本相比之优点

在Visual Studio 2010中,微软用全新的WPF技术重新打造了它的编辑器,借助WPF的强大功能,新的编辑器可以实现很多以前Visual Studio 2008的IDE根本无法想象的功能,比如代码的无级缩放,多窗口即时更新,文档地图,代码的自动产生等等,这些新的IDE特性都会极大地提高程序员的开发效率。

云计算

虽然大家都还在“云里雾里”,但是毫无疑问,“云计算”已经来到了我们身边。在互联网时代,微软输给了Google,面对即将到来的“云计算”时代,微软没有理由再次错过机会。所以早在年初“云计算”的概念刚刚兴起的时候,就有传言微软将进军“云计算”,将旗下的软件业务纳入“云计算”。而现在,随着Visual Studio 2010 CTP和Windows Azure的发布,这一切成为了事实。“云计算”的基本原理,是通过使计算分布在大量的分布式计算机上,而非本地计算机或远程服务器中,企业数据中心的运行将更与互联网相似。这使得企业能够将资源切换到需要的应用上,根据需求访问计算机和存储系统。Windows Azure是一个托管服务套件,它包括虚拟计算,可扩展存储以及自动化服务管理系统等。这些工具将会用来为微软的服务提供支持,其中包括MSN,Xbox Live,以及Office Online等等,实现服务的网络化。

对于开发者而言,Windows Azure已经建立起一个简单而快速的系统,最重要的是它拥有着标准的模型,是我们步入“云计算”时代的捷径。开发者可以根据自己的需要选择第二层功能来使用,比如数据库,业务工具,甚至是第三方软件提供的功能。Windows Azure云计算平台为开发者提供了灵活性和可开发性,同时还需要考虑利用目前现有的技能、工具和技术,比如微软.NET框架和Visual Studio。使用Windows Azure Tools for Visual Studio,我们可以为Windows Azure创建,调试和部署服务和应用程序。Visual Studio 2010为Windows Azure提供了专门的项目模型,同时,我们也可以利于Visual Studio

2010对我们的服务和应用程序进行调试。另外,我们可以利用Visual Studio

2010将我们创建的服务打包,然后通过Windows Live Developer Portal部署到Windows Azure。

总之,有了Visual Studio 2010的帮助,我们就可以拔得“云计算”的头筹。

并行计算

在以往的计算机发展历史中,硬件技术的发展总是给软件带来免费的性能提升,从386到586,从赛扬到奔腾,每次硬件的升级,都带来软件性能的大幅提升,而软件无需做任何变动,只需要坐等硬件升级就可以了。

但是进入多核时代后,这种“免费的午餐”再也没有了。这其中最主要的原因就是当前的应用程序几乎都是针对一个运算核心而设计的,当硬件通过增加运算核心来提高性能时,由于受到其架构的影响,软件并不能充分地利于多个运算核心所带来的性能提升,甚至有的时候性能还有所下降。

在这种情况下,开发者不得不改变应用程序的架构和开发方法,以应对这种多核的趋势,使得自己的软件可以充分利于硬件升级所带来的性能提升。面对这样的需求,Visual Studio 2010加大了对并行运算的支持。微软正在使得尽量大的范围内的开发者都能高效地进行并行计算的开发,不管他使用的是非托管代码还是.NET Framework。在Visual Studio 2010中,我们将看到:

• Visual Studio IDE对并行计算开发的大量支持。比如,Visual Studio

2010的调试器知道代码的并行特性,并且能够在调试程序的不同执行单元的时候,表现应用程序的状态。

• 非托管的C++库和编译器对并行计算的支持

• .NET Framework 4.0对并行计算的大量支持,包括P-LINQ,并行语言语句等等

另外,Visual Studio 2010还提供了一个“并行性能分析器”,它可以帮助我们分析应用程序的性能瓶颈,找到需要并行处理和可以进行并行处理的地方,并以图形化的形式表现出来。这样,“并行性能分析器”配合这Visual Studio

2010,我们就可以轻松地实现应用程序的并行化,再次吃上“免费的午餐”。

C++王者归来

就像我们在前面的文章中分析的那样,自从Visual Studio 6以后,Visual

Studio中的C++再没有多大的变化,包括之前的Visual Studio 2008,都只是对C++进行一些细小的改善。但是这次随着C++新标准C++0x的即将公布,Visual

Studio 2010在C++开发方面也带来了很多革命性的变化。

首先是对C++新标准C++0x的全面支持,不会再像Visual C++ 6一样,被人诟病为对C++标准支持不佳。在IDE方面,微软将Visual C++的构建系统VCBuild整合到了MSBuild中;借助后台编译,Visual C++的IntelliSense更加智能,能够处理更多的文件,更加复杂的项目。另外在MFC方面,通过引入很多新的类,MFC开始全面支持Vista、Windows 7风格的UI。这些特性,都成为Visual Studio 2010跟Visual Studio 2008的一个重要差别,相信C++程序员都会选择Visual Studio 2010而略过Visual Studio 2008。

面向下一代平台:Windows 7

Visual Studio 2008是基于Vista平台的,Vista的失败,也必然会导致Visual

Studio 2008的昙花一现。现在,微软把宝都押在了即将到来的新平台Windows

7上。作为面向下一代平台的开发工具,Visual Studio 2010提供了很多工具来帮助开发者开发基于Windows 7的应用程序,同时使那些已经存在的非托管应

用程序,通过一定的处理也同样能够具有新的操作系统所带来的特性。在Visual Studio 2010中,微软花了很大的力气来使得非托管C++代码的开发更加容易和高效。例如,我们升级了MFC的库和头文件以全面支持Windows 7的界面元素,包括Ribbon界面,搜索功能甚至多点触摸特性的支持。

对于开发基于WPF的应用程序的开发者,Visual Studio 2010同样提供了改进的工具,帮助开发者快速高效地完成界面图像的设计,数据绑定等等。

总之,想让你的应用程序“Windows 7 Ready”,Visual Studio 2010是首选。

Visual Studio 2010作为作为微软着力打造的下一代开发工具平台,跟她的前任Visual Studio 2008相比,她拥有着无数诱人的特性,同时也寄托着无数人的期望。通过我们前面的一系列对比介绍,相信大家对Visual Studio 2010的成功还是抱有很大希望的。

2010年12月7日星期二刘浩---整理

QQ:670970854

百度博客:/guigui126