将自定义视觉样式(.msstyle)应用于单个Winforms应用程序

将自定义视觉样式(.msstyle)应用于单个Winforms应用程序,winforms,visual-styles,msstyles,Winforms,Visual Styles,Msstyles,是否有任何方法可以在不更改整个系统主题的情况下将自定义视觉样式(.msstyle)应用于Windows窗体应用程序?基本上,我们希望我们的应用程序保持相同的主题,而不管控制面板中设置了什么。请不要告诉我你是否认为这是个好主意。我想知道是否有任何方法可以做到这一点,而不涉及专有库,比如一系列本机API调用。谢谢 该函数看起来就像您正在寻找的解决方案。您必须执行P/Invoke才能使用它。不幸的是,这需要大量的挂钩,而不仅仅是简单的P/Invoke 使用托管代码重写/创建新控件可能更快、更好。否则,

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

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

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

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

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

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

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

选择

  • 在托管代码中创建自己的控件,自己处理图形
  • 购买适用于Win32应用程序的产品
  • 开始进入WPF,它提供了创建应用程序主题的现代而明智的方法

我找到了SetWindowTheme,但我认为它不符合我的要求。这个函数似乎只允许我出于样式的目的更改窗口的类。据我所知,我认为它实际上不允许我指定一个完全不同的.msstyles文件的路径。我可以通过将空字符串传递到window类的函数中,强制它完全不使用样式(也称为Windows经典),但这也不是我想要的。我接受这个答案,尽管它没有回答我的问题,因为我试过很多人在这里不接受答案。事实上,这个要求相当荒谬;我很确定这只能通过截取非常复杂的windows API调用来完成,基本上是重新实现样式库处理代码。@luksan:既然这个问题没有得到真正的回答,我想你有理由不接受它;我敢肯定,这里的任何问题都不是因为人们理性地决定是否接受解决方案以及接受哪种解决方案。无论如何,谢谢你的想法。你解决问题了吗?我需要这个too@ThiagoSuchorski我留下了一个关于为什么这可能不是一个好主意的答案。我希望它能给你一些指导。