Microsoft Windows XP:它为开发人员提供了什么?
摘要:本文介绍 Microsoft Windows XP 的一些新特性并探讨这些变化给 Windows 软件带来的影响。集中讨论了 Windows XP 的新外观和 ComCtl32、并列组件共享,以及快速用户切换。
简介
关于 Microsoft® Windows® XP,一个好消息当然是它具有各种精彩的新特性和能力。其次是,虽然系统有些变化,但只要您能为 Windows 编写成功的程序,您就能够为新的 Windows XP 写出更好的程序。
简单地说,Windows XP(Beta 版代号为“Whistler”)是 Microsoft 期待已久的操作系统,它以 Microsoft Windows 2000 的优点为基础,揉和并扩展了 Windows Millennium Edition (Me) 对个人用户的亲和力。
为 Windows XP 编写程序需要一些新的技巧,不过这些技巧并不艰深。更重要的是我们一再提起(尤其是推出 Windows 2000 之后更加强调)的那些话:您的应用程序越“遵纪守法”,在 Windows XP 上它们就运行得越好。Windows XP 应用程序应该遵循您在幼儿园时学到的规则:共享您的资源,与他人和平共处,并且要守规矩。也就是说要“合作”。
初释 Windows XP
Windows XP 是延续并准备替代 Microsoft Windows 2000 和 Microsoft Windows Me 的 Microsoft Windows 操作系统。Windows XP 采用 Windows 2000 的代码基础,继承了它的可靠性和良好性能。Windows XP 还继承和加强了 Windows Me 操作系统的新特性:系统恢复、Windows Media Player、Windows 镜象获取,等等。
对于客户端的机器,Windows XP 有专业版和家用版两个版本。专业版提供公司和其他企业所需的功能,适于商用和替代 Windows 2000 Professional。家用版则适于个人用户和替代 Windows Me。Windows XP 的两个版本都包含一些共同的特性,例如对数字媒体的增强支持,快速用户切换新带来的计算机共享能力。
在服务器端,有三种与 Windows 2000 服务器配置对应的版本:服务器;高级服务器,适于部门级服务器、业务单元、Web 应用支持等;数据中心服务器,适于高可用性和关键任务应用。本文集中讨论客户端版本。至于各服务器版本,它们各有一些类似的特性组合,我们将在以后的文章中再讨论。
为了实现提供一套同时满足商务和个人应用的承诺,Windows XP 增加了一些新特性。也许最明显的一点就是它有一个全新的外形,完全是新的外观和更大、更好的图标,用最小的开发成本就可以给用户更好的使用体验。任务栏上有许多改进,使用户更易于组织信息,例如把同一应用程序的窗口放到一起。此外还有更多的内容:增强的电源管理,并列组件共享,快速用户切换,支持高密度显示,Passport 集成,更易于使用的气球提示,还有 GDI+。这个列表并未包含全部内容。
在这篇文章中,我们将简要地介绍您需要了解的一些重要方面:用新的 ComCtl32 版本 6 编写新 UI,运用并列共享,编写利用 Windows XP 快速用户切换和远程桌面特性的应用程序。在后面几个月,MSDN 将更深入地介绍这些和其他更多专题。PSDK 包含关于这些特性的信息。Windows XP Beta 2 SDK 版有更多内容,将随 Beta 2 软件分发给所有的 MSDN 订户。如果您不是订户,在今年晚些时候才可能得到它。
新面貌
Microsoft Windows 的外观风格自 Windows 95 以来一直未发生显著改变。轮廓分明的灰色三维对话框控件已成为 Windows 的同义词。随着 Windows XP 的发布,我们将看到一个全新的外观风格。Windows XP 以由 Windows 95 Plus Pack 首先引入的桌面主题为基础,提供多个主题来确定不同的系统外观风格。原来的桌面改变用户色彩配置、字体和字号、墙纸设置,而 Windows XP 主题改变控件、窗口边框和菜单的绘制方式。
任务栏已被全面翻新。由于任务栏空间有限,窗口开得越多,按钮就变得越小。我们采取了措施来消除这个问题。大家都曾经碰到过任务栏按钮变得太小而几乎无法使用的情形。如果由于同时打开许多窗口而导致按钮太小,Windows XP 将把按钮分组。例如,假设用户打开了五个 Microsoft® Word 文档,显示的按钮将是一个而不是五个。只要单击这个按钮,就会出现一个菜单,列出所有打开的窗口。
提醒框也得到了整理。提醒框本来是用来向用户提示当前问题的,但后来逐渐失去了这个作用而成为启动应用程序的地方。Windows XP 把当前并未给用户提示信息的图标隐藏起来,从而减少了混乱。用户通过 > 形符号可以显露隐藏的图标,也可以关闭这种行为,选择哪些图标总是显示而哪些总是隐藏。
Windows 打开的方式改变了。为了使桌面整洁,除了回收站外,所有图标都移到了新的更大的开始菜单中。在开始菜单中,系统提供的功能单独出现在一个蓝色的区域中,旁边显示用户最常使用的应用程序。为了使桌面更加整洁,Windows XP 会定期搜索没使用过的应用程序图标,然后由桌面向导帮助用户把它们从桌面上清除掉。放在桌面上的所有数据则保持原样。
Windows XP 本身提供两种外观风格:传统 Windows 风格和我们称为“Whistler 风格”的新风格。在此基础上,Windows XP 有让 ISV 与新风格同步的机制,同时 Microsoft 会逐步添加可体现个人偏好的各种风格,您为 Windows XP 编写的应用程序将能够自动接受它们。
乍一看,多重 Windows XP 风格很象 Window 媒体播放机这类程序的替换外观功能,但实际上有些区别。主题可改变操作系统的外观风格,但仍然提供和 Windows 早期版本一致的 UI。这一点很重要,因为主题是在整个系统范围内应用的。改变应用程序的外观是可行的,例如去除一些按钮。但在操作系统层次上,这并不合适。主题文件的格式不是公开的。Microsoft 保留了主题的设计控制权,以保持一致的用户界面并能够确保设计的连续性。Windows XP 将不提供主题开发工具。
您一定很熟悉传统风格,就是那种灰灰的、轮廓分明的窗口和对话框。Windows XP 的这个选项允许用户保持熟悉的界面。Windows XP Whistler 风格提供了一套全新的外观效果。尽管新的外观风格和传统窗口有很大差异,总体效果还是让人感到相当熟悉。Windows XP 新增加了一种按钮和选项卡,当鼠标指针从上面移过时,它们会改变颜色,和 Web 页面上的热点十分相似。
图 1:Windows XP 开始菜单
主题和控件
通过 Windows XP,Microsoft 把 User Win32 控件和 ComCtl32 版本 6 中的通用外壳控件结合起来了。这些新控件使用新的主题管理程序来显示适当的外观效果。
在以前的 32 位 Windows 中,部分控件在 User32.dll 中实现,其他的则在 ComCtl32 中实现。窗口非客户区域(例如边框和菜单)的显示是由 User32.dll 完成的。User32.dll 是操作系统的核心组件,因此它只能与相应特定版本的操作系统一同使用。对于 Windows 2000 和 Windows Me,ComCtl32 受 Windows 文件保护机制控制,因此只能通过系统更新或 Service Pack 来更改。对于以前版本的 Windows,ComCtl32 实际上是和许多系统组件和应用程序一同分发的,常常造成安装一种应用程序或某个系统组件后另一种应用程序无法运行的情况。Windows XP 和最新的 Windows 2000 Service Pack 使用相同的 ComCtl32。
基于并列组件共享,Windows XP 为 Windows 组件开发指出了新方向。请记住控件外观是由新的主题来确定。为了能在 Windows 中引入新外观风格,并使设计人员能够创新设计 UI 的外观风格又不要求更改核心功能,Microsoft 正在引入主题管理程序 uxtheme.dll。这个新的 DLL 提供新控件的绘制支持,并且向控件提供信息 API 来确定各个部分的位置。所有应用程序的非客户区域,包括滚动条和标题栏,除非是自定义绘制的,均由它产生具有新 Windows XP 风格的外观。这意味着每一个应用程序都将涉及主题管理程序。主题管理程序和 ComCtl32 一起来设置大部分 Windows 应用程序的主题,同时提供一定的灵活性,使 ISV 设计者能够让新的 Windows XP 介入他们的应用程序。
我们充分意识到新的 ComCtl32 可能会中断一些应用程序。为了防止出现这种情况,ComCtl32 版本 6 以共享程序集的形式和 ComCtl32 版本 5 并列安装在 System32 目录下。只有向操作系统声明能够使用这个新 DLL 的应用程序才能获取它。现有应用程序如果不提供声明就继续使用 ComCtl32 版本 5。Windows XP 同时提供版本 5 和 6 的 DLL 并以并列方式安装。在后面的小节我们将进一步讨论有关声明的问题。
注意:ComCtl32 版本 6 将不提供给早期的 Windows 版本;它们将继续使用 ComCtl32 版本 5。版本 5 不提供新外观效果、超链接控件或分组查看等特性。如果您使用这些特性,就应该在 Windows 95、Windows 98 和 Windows 2000 上测试您的应用程序。
要确保您的应用程序在 Windows XP 中使用新的外观风格,您需要使用一个声明来指定对 ComCtl32 版本 6 的依赖,从而确保链接到 ComCtl32。如果您有任何自行绘制的控件,那么今后要通过 uxtheme.dll 来绘制它们,而不是自己绘制。如果您想让它们看起来和 UI 的其他部分相似,就应该这样做。
下面这段代码绘制可识别主题的按钮:
rtButton.top = 100;
rtButton.left = 10;
rtButton.bottom = 130;
rtButton.right = 200;
hTheme = OpenThemeData(hWnd, L"Button");
DrawThemeBackground(hTheme, hdc, BP_PUSHBUTTON, PBS_NORMAL, &rtButton, NULL);
DrawThemeText(hTheme, hdc, BP_PUSHBUTTON, PBS_NORMAL, wzTMB, wcslen(wzTMB),
DT_CENTER | DT_VCENTER | DT_WORD_ELLIPSIS | DT_SINGLELINE, 0, &rtButton);
创建自行绘制的按钮的一个常见原因是想添加位图。现在,ComCtl32 版本 6 的按钮通过与一个图象列表相关联,能够结合开发人员提供的位图。无论您是更新现有应用程序,还是编写新应用程序,一定要用 ComCtl32 版本 6 声明和版本 5 测试您的应用程序,看看您的窗口、对话框和新外观放在一起效果如何。
下面的代码绘制带位图的按钮:
Button_ImageList.himl = himl;
Button_ImageList.uAlign = BUTTON_IMAGELIST_ALIGN_LEFT;
Button_ImageList.margin.top = 3;
Button_ImageList.margin.bottom = 3;
Button_ImageList.margin.left = 3;
Button_ImageList.margin.right = 3;
hwndImageBtn = CreateWindow(L"Button",wzText,WS_CHILD | BS_PUSHBUTTON,0,0,0,0,hWndParent,
NULL,hInst,NULL);
Button_SetImageList(hwndImageBtn, &Button_ImageList);
Button_GetIdealSize(hwndImageBtn, &sizeBtn);
SetWindowPos(hwndImageBtn, hWndParent, 10, 10, sizeBtn.cx, sizeBtn.cy, SWP_SHOWWINDOW |
SWP_NOZORDER | SWP_NOACTIVATE);
注意:如果您用 Microsoft Internet Explorer 技术以 HTML 绘制 UI,您可以在 HTML 中放一个元标记来确保 HTML 控件采用主题。
注意:提醒一下,对于第三方扩展,在您将它们全部进行测试之前,请不要为它们设置主题。关于主控第三方应用程序的情形,我们将在一篇预定于 2001 年 3 月发表的 MSDN 文章中讨论如何在您的进程中处理其他应用程序。
图标
与传统图标相比,Windows XP 中的图标不仅看起来漂亮,而且能够容纳更多细节来表示更复杂和完善得多的信息。新图标可支持最多 24 位的色彩深度,在 Alpha 通道中支持 8 位掩码。用于图标、平铺和缩略视图中的图象可以是 48x48 象素那么大。顺便说一句,以平铺显示图标是表示信息的绝好的新方法。这种图标带有两三行注释,您可以在图标旁边标明关键信息。
图标格式并未改变,Microsoft 已在图象列表 API 中添加支持来显示 32 位的图标。为了正确制作这些图标,使它们在早期版本的 Windows 中也能使用,您需要为每个图标制作多幅图象,如图 2 所示。
图 2:多幅图标图象
在这个例子中,前三个图象用于 16 色的安全模式。后面三个图标用于 Windows XP 256 色模式。最后三个图标有 Alpha 通道,仅适用于以 24 位颜色运行的 Windows XP 或更高版本的操作系统。
请注意,在图标格式中这些图象应该按顺序排列。如果顺序错了,低版本 Windows 抽取这些图标时性能会很差。这意味着内存错误和不正确的绘制。还要注意低版本 Windows 有 10 个图标的资源限制,而 Whistler 支持包含上千个图标资源的图标文件。
可以这样来看待新的图标:过去您用象 Microsoft 画笔这样相对简单的工具来创建图标,而现在您需要用 Photoshop。
注意:Gamani 工具、GIF Movie Gear for Icons 可以生成 24 位色彩、八位 Alpha 通道的 Windows 图标 (ICO) 文件。请参考 http://www.moviegear.com/foricons。
并列共享
新 UI 的运行依赖于一个满足并列共享条件的结构。作为版本管理和 DLL 问题的一个解决方案,Microsoft 极力推荐应用程序应采用并列版本管理策略。正如 ComCtl 版本 6 实施所显示的,并列组件是 Windows 开发的未来。这一节我们将概述 Windows XP 并列共享的新特性。在 2001 年 3 月,MSDN 将发表一篇文章进一步深入讨论这个主题。
有关并列组件共享问题和 DLL 重定向的背景知识,请参阅 David D'Souza、BJ Whalen 和 Peter Wilson 撰写的“在应用程序中实施并列组件(扩展)”(英文)。
应用并列组件时,一个组件的多个版本将被同时安装。应用程序被绑定到设计时采用并经过测试的特定版本的组件。
Windows XP 提供了基础结构来支持集合以及隔离的应用程序,包括 COM+ 和 Win32 程序。从 Win32 应用程序获取并列程序集不需要改变代码。应用程序可以使用最新的系统程序集而不会带来全局影响。
总之,由于隔离的应用程序比较可靠,它们具有更高的价值。在生成和分发过程中,它们都包含了所有必需的组件,不会受其他应用程序带来的变化的影响。隔离的应用程序使用一个 XML 文件作为声明,该声明包含对程序集或应用程序的自我描述。现在,所有的绑定和激活元数据,例如 COM 类、接口、类型库都存储在声明中,而不是注册表里。有两种类型的声明文件:应用程序声明(描述隔离的应用程序),以及程序集声明(描述各个程序集)。
隔离的应用程序可以使用并列程序集。程序集是进行命名、绑定、版本管理、部署和配置的基本单位。它们又有两种变体,即共享和私有。共享程序集安装在 Windows 目录中的 WinSxS 文件夹里,可供计算机上的多个应用程序使用。私有程序集部署在应用程序的目录结构中,并只有该应用程序才能使用。
对于应用程序开发人员,使用并列共享还有另一个好处,那就是计划可以更清晰,因为您的开发计划不会受所采用组件的发布计划的影响。
快速用户切换
Windows XP 引入了一种被称为“快速用户切换”的新功能。快速用户切换基于 Windows 2000 的计算机共享功能和 Windows 2000 Terminal Server 的多任务特性,它使多个用户可以很方便、快捷的共享同一台计算机。
调查表明 80% 的 Windows 个人用户和他们的家庭成员共用一台计算机。尽管 Windows 98 有一个叫做配置文件的功能,但很少有人使用。Windows 2000 提供了单独管理帐号的特性,却很难在家庭环境中使用。
Windows XP 改变了这一切。基于 Windows 2000 的配置文件,在安装过程中为所有用户创建帐号。如果需要,用户可以创建口令,但默认情况下系统不要求口令。一个友好的新欢迎屏幕代替了登录对话框,上面有用户名、图片或图标,而不是用户代号或别名。并且,新的控制面板小程序使编辑用户帐号更加简单。每个用户都有各自的设置,包括墙纸、音乐、图片、个人收藏夹等等。
在快速用户切换中,多个用户使用同一台计算机时无需注销。相反,各个帐号总是登录的,用户可以在所有打开的帐号之间迅速切换。
例如,父亲回家来,开始使用他的机器。他打开 PowerPoint 来编写一个文档。然后儿子 Billy 要求用一会儿计算机,他返回到“欢迎”屏幕,单击“Billy”,然后登录并开始玩游戏。但是,此时他的父亲仍然处于登录状态。如果需要,他无需注销就可以迅速切换回自己的打开的帐号。他的 PowerPoint 演示文稿仍然打开着,Internet 连接也会被保持。
一个相关的特性是远程桌面,它使用户能够从远程机器以自己的设置访问自己的数据。这种情形可能发生在一个网络里,也可能是用户在办公室中锁定了工作站,回家,然后从家中的一台计算机来远程控制工作站应用程序。
Windows XP 通过终端服务器来实现这些功能。对于开发人员,支持快速用户切换和过去可能遇到的一些情况大体相同,例如商业环境下的计算机共享、漫游用户、轮班用户、居家办公族,以及使终端服务器环境中的服务器程序运作良好。
MSDN 将在 2001 年 3 月的一篇文章中进一步探讨用户切换。请参阅这篇文章:为 Microsoft Windows 2000 Terminal Services 和 Windows NT Server 4.0 优化应用程序,终端服务器版(英文)。 现在,要记住为了支持快速用户切换,应用程序应遵循已经确认的 Windows 数据和设置管理规范 (http://msdn.microsoft.com/library/default.asp? URL=/library/specs/w2kserve.htm)(英文)。
默认设置为在“我的文档”文件夹中存储用户创建的数据。
正确分类和存储应用程序数据。
遇到“访问被拒绝”消息时体面地降级。
此外,还要考虑一些因素。应用程序应满足下列条件:
支持“所有用户”安装。
正确检测其他实例。
与服务通讯。
此外,要考虑当您的应用程序不在当前桌面时的情况:
最小化处理器的占用。
不要播放声音。
不要更新显示。
让系统资源能够检测到它。
其他特性
虽然从开发的角度我们还可以再介绍一些 Windows XP 的特性,但全面介绍这个操作系统显然已超出了本文的范畴。
电源管理:Windows XP 采用 Windows 2000 的电源管理特性,Robert Di Benedetto 的文章“在 Windows 2000 应用程序中支持 OnNow(电源管理)的窍门”(英文)很好地介绍了这个问题。
GDI+:Graphics Device Interface Plus (GDI+) 是 Microsoft Windows.NET 的一部分,提供二维矢量图形、图象处理和输出功能。通过添加新特性和优化现有特性,GDI+ 改进了 GDI(较早期 Windows 版本提供的图形设备接口)。Beta 2 SDK 将提供更多信息。
64 位 Windows:Microsoft 从一个源代码树同时为 32 位和 64 位的 Windows 构建 Windows XP。在未来某一天,您的应用程序将成为 64 位的,我们极力推荐您现在就开始使您的应用程序符合 64 位系统的要求。请参阅 MSDN Library 中 Platform SDK 的有关小节,标题为“Getting Ready for 64-bit Windows”(为 64 位的 Windows 作好准备)。
支持高密度显示:133 DPI 新型监视器已经面世,而 200 DPI 的监视器也将推出。您需要用 140 DPI 字体和大图标来测试您的应用程序。Windows XP 对话框、按钮、标题栏和语音输入都可以使用大字体。请在 2001 年 3 月的 MSDN 文章中查找有关如何为高密度显示编写应用程序的内容。