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

发布于 2024-09-26 17:12:48 字数 243 浏览 3 评论 0原文

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

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

As you can see on image

请参阅按钮作为示例。

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

I'm working with some windows API to create a little application.
I already created the buttons, windows, alright.

But the problem is the components I created don't look like the OS theme. They look very simple:

As you can see on image

See the button as example.

How do I enable the Windows theme? It can be in C or Delphi.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

倦话 2024-10-03 17:12:49

对于使用 Windows 控件的应用程序,记录在 此 msdn 中编辑

:长话短说,Windows 需要知道应用程序是否打算使用新样式控件。一些较旧的应用程序与 XP 及更高版本的新皮肤外观不兼容。因此,每个 exe 都应该在清单(可执行文件中的嵌入 xml 文件)中声明它与哪个版本兼容。该清单用于其他用途,例如声明您兼容或不兼容的内容(DLL 版本,120 dpi)以及免注册 com.

For an application using windows controls, that is documented in this msdn article

Edit: To make a long story short, Windows needs to know for an application if it was intended to use the new style controls. Some older apps just aren't compatible with the new skinned looks of XP and later. Each exe should therefore declare with which version it is compatible in a manifest, an embedded xml file in the executable. The manifest is used for other things like declaring what you are or aren't compatible with (DLL versions, 120 dpi) as well as registration-free com.

尤怨 2024-10-03 17:12:49
  1. 这取决于Delphi的版本
    你正在使用。 IIRC 预 Delphi 6 你
    需要添加所需的清单
    手。 D7及更高版本有一个组件
    需要将其放在表格上
    添加主题支持(它只是添加清单),直到 D2007 IIRC
    在项目中添加了一个简单的检查
    选项。
  2. 早期版本的Delphi不会显示主题设计形式。您只会在运行时看到主题。
  3. 并非所有控件都支持主题。主题需要调用正确的绘制 API,如果控件不符合要求,则不会成为主题。标准网格是一个很好的例子,直到后期版本才以绘制为主题。
  1. It depends on what version of Delphi
    you're using. IIRC pre-Delphi 6 you
    need to add the needed manifest by
    hand. D7 and later has a component
    that need to be dropped on a form to
    add theme support (it simply adds the manifest), until D2007 IIRC
    added a simple check in the project
    options.
  2. Earlier version of Delphi won't show themed design form. You will see themes only at run time.
  3. Not all controls may support themes. Themes require the proper draw API to be called, if a control doesn't comply it won't be themed. The standard grid is a good example, it isn't draw themed until a late version.
对风讲故事 2024-10-03 17:12:49

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

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

If you're using Delphi 2007 or later, Project > Options > Application > Use Windows Themes needs to be checked.

(This should be automatically checked for new applications).

椵侞 2024-10-03 17:12:49

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

要使用 Windows 主题 api,您需要 JEDI API 库的 JwaUxTheme 单元。

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

一些很好的参考:

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

如果您使用 VCL、主题引擎Skin Engine 完全支持 Windows XP 主题。

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

In Visual Styles Reference: Functions of MSDN, I found an interesting functions, that is, SetWindowTheme(). It can be used to either to apply or remove visual style to/from a control/window, there are several steps need to be done to enable Visual Style in an application.

To use Windows Theme api, you'll need JwaUxTheme unit of JEDI API Library.

However, applying theme from Windows Theme files (.theme) to an application seems has to be done by turning off visual style from controls and write owner drawn controls based on information from .theme files. MSDN has a documentation about .theme file specification (see the first reference below).

Some good references:

Is Windows Presentation Foundation (WPF) Themes bad? There is a code example how to load it here.

If you use VCL, Theme Engine and Skin Engine has a complete support of themes for Windows XP.

If beauty application is your priority (without supports for Windows themes), I think, BusinessSkinForm and DynamicSkinForm is the best choice.

蓝戈者 2024-10-03 17:12:49

如果您的可执行文件名称是 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

If your executable name is YourAppName.exe then, create a manifest file named YourAppName.exe.manifest in the same directory where the executable application is.

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>

For embedding manifest file into executable use mt.exe
commandline syntax:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文