如何让我的应用程序使用Windows主题?

我正在使用一些Windows API来创建一个小应用程序。 我已经创建了按钮,窗口,好吧。

但问题是我创建的组件看起来不像操作系统主题。 它们看起来很简单:

正如你在图像上看到的那样

请参阅按钮作为示例。

如何启用Windows主题? 它可以是C或Delphi。

对于使用Windows控件的应用程序,请参阅此msdn文章

编辑:简而言之,Windows需要知道应用程序是否打算使用新的样式控件。 一些较旧的应用程序与XP及更高版本的新皮肤外观不兼容。 因此,每个exe应声明它与清单中的兼容版本,可执行文件中的嵌入式xml文件。 清单用于其他事情,例如声明你是什么或不兼容(DLL版本,120 dpi)以及免注册com。

  1. 这取决于您使用的Delphi版本。 IIRC前Delphi 6您需要手动添加所需的清单。 D7及更高版本有一个组件需要放在表单上以添加主题支持(它只是添加清单),直到D2007 IIRC在项目选项中添加了一个简单的检查。
  2. 早期版本的Delphi不会显示主题设计forms。 您将仅在运行时看到主题。
  3. 并非所有控件都支持主题。 主题需要调用适当的绘制API,如果控件不符合,则不会以主题为主。 标准网格是一个很好的例子,它不会在晚期版本之前绘制主题。

如果您使用的是Delphi 2007或更高版本,则需要检查项目>选项>应用程序>使用Windows主题。

(应自动检查新应用程序)。

在Visual Styles参考: MSDN的function中,我发现了一个有趣的函数,即SetWindowTheme() 。 它可用于向控件/窗口应用或从控件/窗口中删除视觉样式,需要执行几个步骤才能在应用程序中启用视觉样式。

要使用Windows Theme API,您需要JEDI API库的JwaUxTheme单元。

但是,将主题从Windows主题文件( .theme )应用到应用程序似乎必须通过从控件关闭视觉样式并根据来自.theme文件的信息编写所有者绘制的控件来完成。 MSDN有关于.theme文件规范的文档(请参阅下面的第一个参考资料)。

一些很好的参考:

  • 创建和安装主题文件
  • 完全主题的Windows Vista控件
  • 使用Delphi创建Windows Vista Ready应用程序

Windows Presentation Foundation(WPF)主题不好吗? 有一个代码示例如何在此处加载它。

如果您使用VCL, 主题引擎和皮肤引擎完全支持Windows XP的主题。

如果美容应用程序是您的首选(不支持Windows主题),我认为, BusinessSkinForm和DynamicSkinForm是最佳选择。

如果您的可执行文件名是YourAppName.exe,则在可执行应用程序所在的同一目录中创建名为YourAppName.exe.manifest的清单文件。

YourAppName.exe.manifest:

    MyApp