我正在使用一些Windows API创建一个小程序。我已经创建了按钮、窗口,没问题。
但问题是我创建的组件看起来不像操作系统主题。它们看起来非常简单:
以按钮为例。
如何启用Windows主题?可以使用C或Delphi实现。
我正在使用一些Windows API创建一个小程序。我已经创建了按钮、窗口,没问题。
但问题是我创建的组件看起来不像操作系统主题。它们看起来非常简单:
以按钮为例。
如何启用Windows主题?可以使用C或Delphi实现。
针对使用Windows控件的应用程序,可以在此MSDN文章中找到相关文档。
编辑:简而言之,Windows需要知道应用程序是否打算使用新样式的控件。一些旧应用程序可能与XP及更高版本的新外观不兼容。因此,每个exe文件都应在嵌入式xml文件中声明其与哪个版本兼容的清单。该清单还用于其他事项,例如声明您与哪些内容兼容或不兼容(DLL版本、120 dpi),以及无需注册即可使用的组件。
TButton
、TEdit
、TListBox
等,只是 OS 控件的包装器,因此渲染是由 Windows 而不是 Delphi 代码完成的。这些控件可以很容易地按照正常方式进行主题设置。现在,一些 VCL 控件,如 TGrid
,并不是本机 OS 控件,而是由 Delphi 代码绘制的。它们看起来会与开发人员所设计的完全一样。但是,可以使用 Windows API 或 ThemeServices
来查询当前主题的属性/绘制详细信息。因此,一些此类控件在某种程度上是“主题化”的,而大多数则不是。 - Andreas RejbrandTXPManifest
。它位于 Win32
组件面板上。 - kol(对于新应用程序,这应该会自动勾选)。
TButton
,TEdit
等所做的事情。大多数VCL控件只是标准Windows控件的包装器。 - Andreas RejbrandJwaUxTheme
单元。.theme
)应用主题似乎必须通过关闭控件的视觉样式并编写基于来自 .theme
文件的信息的自绘制控件来完成。MSDN 有关于 .theme
文件规范的文档(请参见下面的第一个参考资料)。
一些好的参考资料:
Windows Presentation Foundation (WPF)主题不好吗?这里有一个加载它的代码示例here。
如果您使用VCL,Theme Engine和Skin Engine完全支持Windows XP的主题。
如果美观的应用程序是您的首要任务(不支持Windows主题),我认为BusinessSkinForm和DynamicSkinForm是最佳选择。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