Frage

Ich habe eine Benutzeroberfläche in VB 2005, die im XP-Stil großartig aussieht, im klassischen Stil jedoch abscheulich aussieht.

Irgendwelche Ideen, wie man erkennt, in welchem ​​Modus sich der Benutzer befindet, und wie man die Formulare im Handumdrehen neu formatiert?


Beitragsantwort bearbeiten:

Danke Daniel, es sieht so aus, als würde das funktionieren.Ich verwende die erste Lösung, die Sie mit der Funktion GetCurrentThemeName() gepostet haben.

Ich mache Folgendes:

Funktionsdeklaration:

 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

Codekörper:


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)

Die MessageBox erscheint leer, wenn ich im klassischen Windows-Stil/Design bin, und erscheint mit „C:\WINDOWS esources hemes\luna\luna.msstyles“, wenn sie im Windows XP-Stil/Design ist.Ich muss noch etwas genauer prüfen, was passiert, wenn der Benutzer ein anderes Thema als diese beiden festlegt, aber das sollte kein großes Problem darstellen.

War es hilfreich?

Lösung

Versuchen Sie es mit einer Kombination aus GetCurrentThemeName (MSDN-Seite) Und DwmIsCompositionEnabled

Den ersten habe ich mit PInvoke verknüpft, sodass Sie ihn einfach in Ihren Code einfügen können, und für den zweiten können Sie den im MSDN-Kommentar bereitgestellten Code verwenden:

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

Sehen Sie, welche Ergebnisse Sie mit diesen beiden Funktionen erzielen.Sie sollten ausreichen, um zu bestimmen, wann Sie ein anderes Thema verwenden möchten!

Andere Tipps

Persönlich verwende ich Folgendes, um zu sehen, ob die App unter dem Thema läuft:

if (Application.RenderWithVisualStyles)
{
    // you're themed
}

Da ist das IsThemeActive WinAPI-Funktion.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top