我正在使用一些Windows API来创建一个小应用程序。 我已经创建了按钮,窗口,好吧。
但问题是我创建的组件看起来不像操作系统主题。它们看起来很简单:
请参阅按钮作为示例。
如何启用Windows主题?它可以是C或Delphi。
答案 0 :(得分:6)
对于使用Windows控件的应用程序,请记录在this msdn article
中编辑:简而言之,Windows需要知道应用程序是否打算使用新的样式控件。一些较旧的应用程序与XP及更高版本的新皮肤外观不兼容。因此,每个exe应声明它与清单中的兼容版本,可执行文件中的嵌入式xml文件。清单用于其他事情,例如声明你是什么或不兼容(DLL版本,120 dpi)以及免注册com。
答案 1 :(得分:2)
答案 2 :(得分:1)
如果您使用的是Delphi 2007或更高版本,Project>选项>申请>使用Windows需要检查主题。
(应自动检查新应用程序)。
答案 3 :(得分:0)
在MSDN的Visual Styles Reference: Functions中,我发现了一个有趣的函数,即SetWindowTheme()。它可用于向/从控件/窗口应用或删除视觉样式,需要执行several steps才能在应用程序中启用视觉样式。
要使用Windows Theme API,您需要JwaUxTheme
个JEDI API库。
但是,将主题从Windows主题文件(.theme
)应用到应用程序似乎必须通过从控件关闭视觉样式并根据.theme
文件中的信息编写所有者绘制的控件来完成。 MSDN有关于.theme
文件规范的文档(请参阅下面的第一个参考资料)。
一些好的参考资料:
Windows Presentation Foundation(WPF)主题不好吗?有一个代码示例如何加载它here。
如果您使用VCL,Theme Engine和Skin Engine完全支持Windows XP的主题。
如果美容应用程序是您的首选(不支持Windows主题),我认为BusinessSkinForm和DynamicSkinForm是最佳选择。
答案 4 :(得分:0)
如果您的可执行文件名是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>
&#13;
将清单文件嵌入可执行文件使用mt.exe 命令行语法:
mt.exe –manifest YourAppName.exe.manifest -outputresource:YourAppName.exe;1
&#13;