繁体   English   中英

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

[英]How do I make my application use the Windows theme?

我正在使用一些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不会显示主题设计形式。 您将仅在运行时看到主题。
  3. 并非所有控件都支持主题。 主题需要调用适当的绘制API,如果控件不符合,它将不是主题。 标准网格是一个很好的例子,它不会在晚期版本之前绘制主题。

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

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

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

YourAppName.exe.manifest:

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

要将清单文件嵌入可执行文件,请使用mt.exe命令行语法:

 mt.exe –manifest YourAppName.exe.manifest -outputresource:YourAppName.exe;1 

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

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

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

一些很好的参考:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM