2011-03-30 49 views
3

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

+1

您是否解决了您的问题?我也需要这个 – 2016-12-26 13:08:59

+0

@ThiagoSuchorski我留下了一个答案,为什么这可能不是一个好主意。我希望它能给你一些指导。 – 2017-02-23 19:04:58

回答

0

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

+0

我发现SetWindowTheme,但我不认为它做我想要的。这个功能似乎只允许我为样式目的改变窗口的类。就我所知,我不认为它实际上允许我指定一个完全不同的.msstyles文件的路径。 – luksan 2011-03-31 15:32:00

+0

我可以强制它通过传递一个空字符串到窗口类的函数中,而不是使用样式(AKA Windows Classic),但这不是我想要的。 – luksan 2011-03-31 15:34:27

+0

我接受这个答案,即使它没有回答我的问题,因为我尝试了不接受这里答案的人。事实上,这个要求非常荒谬,我很确定它只能通过非常复杂的windows API调用拦截来完成,基本上是重新实现样式库处理代码。 – luksan 2011-09-21 17:32:48

0

这可悲的是需要大量的钩子,而不仅仅是简单的P/Invoke。

使用托管代码重写/创建新控件可能会更快更好。否则,您需要在本机DLL的帮助下挂接主叫,并且非常小心您的操作。

事实上,我不知道如何正确地实施它,恐怕。那么我会给出更有帮助的答案。整个过程看起来过于复杂,通过查看Style Soft所谓的“VisualStyler”的一个现在被废弃的工具的代码(该公司似乎从2014年开始死掉),这很好地支持了所有这些。

另外,如果你真的决定使用uxtheme,你会被Windows主题引擎提供的内容所限制,只限于它的视觉样式文件格式和hickup(你现在是否还有一个好的编辑器?)。

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

选项?

  • 在托管代码中创建自己的控件,自己处理绘图。
  • 购买适用于Win32应用程序的产品。
  • 开始进入WPF,它提供了现代和理智的方式来创建应用程序主题。
相关问题