我在VB 2005中有一些UI,在XP Style中看起来很棒,但在Classic Style中却很丑陋。

关于如何检测用户处于哪种模式并即时重新设置表格格式的任何想法?



发表答案编辑:

谢谢丹尼尔,看起来这行得通。我正在使用您通过GetCurrentThemeName()函数发布的第一个解决方案。

我正在执行以下操作:

功能声明:

 Private Declare Unicode Function GetCurrentThemeName Lib "uxtheme" (ByVal stringThemeName As System.Text.StringBuilder, ByVal lengthThemeName As Integer, ByVal stringColorName As System.Text.StringBuilder, ByVal lengthColorName As Integer, ByVal stringSizeName As System.Text.StringBuilder, ByVal lengthSizeName As Integer) As Int32


代码体:

Dim stringThemeName As New System.Text.StringBuilder(260)
Dim stringColorName As New System.Text.StringBuilder(260)
Dim stringSizeName As New System.Text.StringBuilder(260)

GetCurrentThemeName(stringThemeName, 260, stringColorName, 260, stringSizeName, 260) MsgBox(stringThemeName.ToString)



当我使用Windows经典样式/主题时,MessageBox会显示为空,如果使用Windows XP样式/主题,则会显示“ C:\ WINDOWS \ resources \ Themes \ luna \ luna.msstyles”。我需要做更多的检查,以查看如果用户设置了另一个主题而不是这两个主题,会发生什么,但这应该不是一个大问题。

最佳答案

尝试结合使用GetCurrentThemeNameMSDN Page)和DwmIsCompositionEnabled

我将第一个链接到PInvoke,因此您可以将其放入代码中,而第二个可以使用MSDN注释中提供的代码:

[DllImport("dwmapi.dll", PreserveSig = false)]
public static extern bool DwmIsCompositionEnabled();


看看您从这两个函数中得到了什么结果;它们应该足以确定您何时要使用其他主题!

关于vb.net - .Net-检测外观设置(经典还是XP?),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34712/

10-15 05:18