视觉样式概述

本主题介绍视觉样式并识别支持这些样式的 Windows 组件。 它还解释了在应用程序中使用视觉样式必须采取的步骤。 本主题包含下列部分:

主题和视觉样式

Windows 包含多项功能,让用户可以定制 UI,以满足个人需求和偏好。 这些功能包括在适用于 Windows 95 的 Microsoft Plus! 中引入的主题。 主题是用户可选的设置集合,包括壁纸、光标、字体、声音和图标。 以下是主题的一些特征。

  • 主题设置在 .theme 文件中指定,其格式类似于 win.ini 文件。
  • 独立软件供应商 (ISV) 可以随产品创建并分发 .theme 文件。
  • 在 Windows Vista 之前的版本中,主题文件显示在“显示”控制面板的“主题”选项卡上。 在 Windows Vista 及更高版本中,主题显示在个性化控制面板中。

有关主题文件的详细信息,请参阅主题文件格式

视觉样式是定义 Windows 常用控件外观的规范。 视觉样式与主题相关联;也就是说,.theme 文件包含一个部分,用于指定特定主题激活时应用的视觉样式。 以下是视觉样式的一些特征。

  • 用户可以随时选择不同的主题来更改视觉样式。
  • 必须使用视觉样式 API 将当前活动的视觉样式应用到应用程序的自定义或所有者绘制的控件(如有)。
  • 定义视觉样式的信息存储在 .msstyles 文件中。 Microsoft 不支持编写 .msstyles 文件。

下图显示的是 Windows 7 桌面上一个带有任务栏的简单对话框,该桌面使用的是 Windows Aero 主题且不透明。 由于应用程序未配置为使用视觉样式,因此无论主题设置如何,按钮的外观都是一样的。

screen shot of a dialog box with buttons that do not use transparency

相比之下,下图显示的是同一桌面上的同一对话框,但这次应用程序已配置为使用视觉样式。 注意客户端区域中按钮的不同外观。 由于系统应用了 Aero 主题中定义的视觉样式,因此按钮看起来有所不同。

screen shot of a dialog box with buttons that use transparency

以下示例显示了 Windows 8 桌面上的类似对话框。 在 Windows 8 中,视觉样式始终处于开启状态,因此 Windows 8 应用程序可以“免费”获取主题。

screen shot of a simple dialog box on the windows 8 desktop

视觉样式组件

以下组件支持视觉样式:

  • 通用控件链接库 (ComCtl32.dll) 6 或更高版本
  • UxTheme.dll 中实现的视觉样式 API
  • 主题服务
  • 一个或多个视觉样式定义文件 (.msstyles)

视觉样式 API 依赖于名为“主题”的系统服务。 常用控件链接库会查询主题服务以获取与样式相关的信息,在 Windows 7 之前,它会使用该服务以当前视觉样式来呈现控件。

在 Windows 8 及更高版本中,如果主题服务已关闭,视觉样式 API 仍可正常工作。 这意味着,当主题服务关闭时,常用控件和窗口的非客户端区域仍将具有视觉样式。 仍然需要“主题”服务的 Windows 8 功能包括:

  • 更改视觉样式通常是通过“电脑设置”的“个性化”页面来实现的。
  • 对切换用户、注销、关闭和跨用户会话共享等操作进行的性能优化。

视觉样式 API 可从与当前选定主题相关联的 .msstyles 文件中获取样式信息。 .msstyles 文件包含一组用于定义视觉样式的指标、字体、颜色和位图

支持视觉样式的应用程序要求

要使用视觉样式,应用程序必须在包含 ComCtl32.dll 6 或更高版本的操作系统上运行。 如果希望应用程序使用 ComCtl32.dll 版本 6,则必须添加应用程序清单或编译器指令,以指定在版本 6 可用时使用该版本。 有关如何创建应用程序清单以使应用程序使用视觉样式的信息,请参阅启用视觉样式

对于常用控件,无需进一步操作即可确保控件以用户偏好的视觉样式显示。

如果应用程序包含自定义或所有者绘制的控件,则需要使用视觉样式 API 来检索有关当前活动视觉样式的信息,并以该样式来绘制控件。

对于 Windows 8 之前的 Windows 版本,应用程序通常需要为绘制自定义控件和所有者绘制的控件提供两个独立的代码路径。 一个代码路径在使用视觉样式的主题激活时绘制控件,而另一个代码路径在 Windows 经典主题或高对比度主题激活时绘制控件。 不过,在 Windows 8 中,视觉样式始终处于开启状态,因此不需要单独的主题代码路径。 适用于 Windows 8 的应用程序可“免费”获取高对比度主题。有关详细信息,请参阅支持高对比度主题

有关详细信息,请参阅 对自定义控件和所有者绘制的控件使用视觉样式视觉样式参考

视觉样式