3

我有一些在 VB 2005 中的 UI,在 XP 风格中看起来很棒,但在经典风格中变得丑陋。

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


发布答案编辑:

谢谢丹尼尔,看起来这会奏效。我正在使用您使用 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”。如果用户设置的主题不是这两个主题,我将不得不做更多的检查,看看会发生什么,但这应该不是一个大问题。

4

3 回答 3

2

尝试使用GetCurrentThemeName ( MSDN Page ) 和DwmIsCompositionEnabled的组合

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

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

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

于 2008-08-29T16:56:40.620 回答
1

就个人而言,我使用以下内容来查看应用程序是否在主题下运行:

if (Application.RenderWithVisualStyles)
{
    // you're themed
}
于 2008-09-19T17:53:13.777 回答
0

IsThemeActive WinAPI 函数。

于 2008-08-29T16:55:35.787 回答