使您的应用程序具备 Windows XP 视觉风格

用户体验改善计划 - 使您的应用程序具备 Windows XP 视觉风格

周融,2006 年 12 月
(C) 2006 保留所有权利。

Windows XP 在市场中的份额居高不下,除了有其强大功能作为保障外,它的美丽的外观则更加引人注目。Windows XP 提供了一种全新的视觉体验,让所有为它设计的应用程序都有了新的界面外观。本文介绍一种让旧视觉样式的应用程序变为 Windows XP 和 Windows Vista 的新视觉样式的简单方法。

本文包含以下内容:
1 理解 Windows XP 视觉样式
2 使用 ComCtl32 版本 6
3 使用程序清单文件
4 在 Delphi 中使用 Windows XP 和 Windows Vista 视觉样式
5 结论
6  附录:Windows XP 视觉洋式对公共控件的改进

理解 Windows XP 视觉样式

Windows XP 视觉样式基于一系列全新的 API 构建,这些 API 被封装在 Windows 用户体验界面 DLL(uxtheme.dll)中,从 Windows XP 之后,Microsoft Windows 将一直拥有并扩充这个 DLL,使得应用程序在每一个不同 Windows 操作系统上都能够保持与系统样式一致。

我们来看两张图片,一张启用了 Windows XP 样式,一种是经典 Windows 2000 样式。从这两张图来看,启用了 Windows XP 样式的 UI 更加美观,而且,对于系统颜色、控件外观和行为都有了变化;旧的 Windows 视觉样式界面则不能使用操作系统的新视觉体验,而且还有一个重要的缺陷就是无法使用 Unicode 的内联支持。

启用 Windows XP 视觉样式后的程序能保证与以前版本的 Windows 兼容。Windows 并不会在应用程序中显式的引用 uxtheme,而是采取一段资源脚本判断应用程序使用的是哪一个控件版本。如果 Windows 发现应用程序使用了版本 6 以前的版本,那么 Windows 就不为此程序启用新样式,否则就会启用与宿主操作系统相同的视觉样式。关于如何让 Windows 使用控件版本 6,请参考“使用 ComCtl32 版本 6”。

另外,您可以将一个不支持 Windows XP 新视觉样式的应用程序变得受支持。关于如何升级程序的详细信息,请参考“使用程序清单文件”。

如果需要在 Delphi 编程时使用内置 Windows 视觉样式支持,请参考“在 Delphi 中使用 Windows XP 和 Windows Vista 视觉洋式”。

使用 ComCtl32 版本 6

ComCtl32.dll 和 ComCtl32.ocx 是 Windows 基本控件支持 API 库,提供对 Windows 基本控件的呈现、洋式和行为支持。在 Windows XP 和以后的 Windows 版本中,ComCtl32 的版本为 6.0 或者更高,版本 6 提供了对全新视觉样式的支持;而以前版本的 Windows 则使用 5.7 或更早版本的 ComCtl32.dll。如果应用程序使用的资源为 ComCtl32 版本 6,那么这个应用程序就可以具备 Windows XP 视觉洋式。

ComCtl 版本 6 有如下新特性:
 改善所有公共控件的用户体验,支持视觉和主题 API(uxtheme.dll)。
全面内置支持 Unicode。
程序配置文件(.config)和程序清单文件(manifest)的支持。
应用程序错误报告、用户帐户控制(UAC)支持(仅适用于 Windows Vista)。

可以通过两种方式使用 ComCtl32 版本 6。
使用程序清单文件显式的指定程序使用。
使用资源脚本在 EXE 和 DLL 中使用版本 6。

当您指定了使用 ComCtl32 版本 6 后,Windows 将对您的应用程序做如下变更:
应用 Windows 视觉样式。
应用 Unicode。
应用用户帐户控制(如果有)

使用程序清单文件

这种方式对于一个已知的 PE 文件(EXE、DLL、OCX 或者 CPL)有效,如果该 PE 文件不支持视觉洋式,可以按照如下方法创建一个程序清单文件,强制让此程序支持 Windows XP 视觉洋式。下面以 HDMain.exe 为例。

1、找到此应用程序的主要启动文件名称。

例如,HDPOS 系统的主要启动程序名称为 HDMain.exe(而不是 HDPos.exe),因为 HDPos.exe 只是一个引导程序。

2、在与此 EXE 相同位置的文件夹中,创建清单文件。

我们找到 HDmain 所在文件夹,d:/Project/HDPOS3/bin,用 Windows 资源管理器创建一个文本文件,命名为 HDMain.exe.manifest。注意,.manifest 是扩展名;HDMain.exe 是主要启动程序的完整名称。如果您希望 WSConfig 也具备 Windows XP 洋式,则将此文件命名为 WSConfig.exe.manifest。

3、编辑清单文件

用记事本打开此文件,复制如下 XML 标记到文件并保存。

<? xml version="1.0" encoding="UTF-8" standalone="yes" ?>
 
< assembly  xmlns ="urn:schemas-microsoft-com:asm.v1"  manifestVersion ="1.0" >
 
< assemblyIdentity  processorArchitecture ="*"  version ="6.0.0.0"  type ="win32"  name ="Heading.POS" />       < description > Heading POS </ description >    < dependency >< dependentAssembly >< assemblyIdentity  type ="win32"  name ="Microsoft.Windows.Common-Controls"  version ="6.0.0.0"   publicKeyToken ="6595b64144ccf1df"  language ="*"  processorArchitecture ="*"     />                                 
</ dependentAssembly >                   
</ dependency >                              
</ assembly >                                

并用您的应用程序描述替代清单中的 <description> 节的相应部分。

4、重新运行应用程序

重新运行程序。您可以惊喜的发现您的程序已经支持全新的 Windows 视觉洋式和 Unicode 了!注意,此方法在 Windows Vista 中可能对非第一次运行的程序无效。

另外一种方法就是利用资源脚本将清单导入到 PE 文件中。步骤如下:
1、用 PE 编辑器软件(如 Visual Studio、PE Explorer)打开此文件。
2、新建一个资源,命名为 RT_MANIFEST。
3、把上面的一段 XML 导入到 RT_MANIFEST,并设置其 ID 为 1。
4、保存此 PE 文件。
注意:PE Explorer 自带了这个功能。

在 Delphi 中食用 Windows XP 和 Windows Vista 视觉洋式

如何在编程的时候直接拥有对 Windows 视觉洋式的支持?在 Delphi 中相当简单。

1、Delphi 7、Delphi 8、Delphi 2005 和 Delphi 2006 的方法

在程序的任何一个单元中,引用 XPMan。

uses
  Windows, Forms, SysUtils, XPMan;

2、Delphi 5 的方法

复制在 Delphi 7 安装目录 Lib 下的 XPMan.pas, XPMan.dcu 和 WindowsXP.res 并复制到 Delphi 5 的 Lib 目录下,然后按照 Delphi 7 的处理方法实现。

3、更简单的方法

复制附件中 WindowsXP.res 文件并在您的工程中的任何一个单元,引用 {$R WindowsXP.res}。

unit ...
interface...
implementation

{$R WindowsXP.res}

end.

结论

Windows XP 和 Windows Vista 视觉洋式为应用程序界面添砖加瓦,使得程序和操作系统的外观保持一致。在支持视觉样式的操作系统上启用程序的视觉样式支持,是用户体验改善计划的开端。我们相信您的程序会因为拥有新的视觉洋式而变得更加完美。

关于视觉样式,请参考:
MSDN: Using Windows XP Visual Styles
[ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/commctls/userex/cookbook.htm]

附录:Windows XP 视觉样式对基本公共控件的改进

按钮(Button)
平面效果
鼠标悬停淡出效果
默认按钮交叉淡出效果

文本框(TextBox)
平面效果
鼠标悬停边框淡出效果
密码框文本加大显示
支持气球提示

标签(Label)

分组框(GroupBox)
分组框标题高亮显示

检查框(CheckBox、RadioButton)
鼠标悬停淡出

下拉框(DropDownList)
下拉时弹出效果
鼠标悬停淡出

菜单(Menu)
阴影
淡出

工具栏(Toolbar)
平面效果

进度条(ProgressBar)
无限期等待样式(Marquee,一个从左到右的小路色块不停的走动,表示等待时间未知)

超级链接(SysLink)
只有启用了 ComCtl32 版本 6 才能食用此控件

TreeView 和 ListView
改动很大,支持很多新的样式(平铺、分组查看、超大图标、自动调整视图 AutoIntoView 等),
详细信息请参考 Platform SDK。

更多信息,请参阅 MSDN: Windows Vista User Interface Guide。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值