3

有什么方法可以在不更改整个系统主题的情况下将自定义视觉样式 (.msstyle) 应用于 Windows 窗体应用程序?基本上,我们希望我们的应用程序保持相同的主题,无论在控制面板中设置了什么。请不要告诉我你是否认为这是个好主意。我想知道是否有任何不涉及专有库的方法来执行此操作,例如一系列本机 API 调用。谢谢!

4

2 回答 2

0

SetWindowTheme功能看起来像您正在寻找的解决方案。您必须执行 P/Invoke 才能使用它。

于 2011-03-30T21:33:58.743 回答
0

遗憾的是,这需要大量的挂钩,而不仅仅是简单的 P/Invoke。

使用托管代码覆盖/创建新控件可能会更快更好。否则,您将需要在本机 DLL 的帮助下挂钩主题调用,并且在操作时要非常小心。

事实上,恐怕我自己也不知道如何实现它。那时我会给出一个更有帮助的答案。通过查看 Style Soft(该公司似乎自 2014 年以来似乎已死)的一个现已废弃的工具“VisualStyler”的代码,整个进展似乎过于复杂,该工具很好地支持了所有这些。

另外,如果你真的决定使用 uxtheme,你会被 Windows 主题引擎提供的东西所困,仅限于它的视觉风格文件格式和打嗝(你现在甚至有一个好的编辑器吗?)。

我希望微软在为 XP 创建主题引擎时能做到一针见血,允许应用程序开发人员将其用于他们自己的应用程序标识。但在主题/Windows 产品标识方面,他们似乎从来没有这样做过(另一个例子是 DWM 没有公开任何 3D 转换功能,但通过滥用这些东西来防止应用程序做疯狂的事情可能是个好主意)。

选项?

  • 在托管代码中创建自己的控件,自己处理绘图。
  • 购买适用于 Win32 应用程序的产品。
  • 开始使用 WPF,它提供了创建应用程序主题的现代和健全的方法。
于 2017-02-23T19:02:07.793 回答