Question

J'ai une interface utilisateur dans VB 2005 qui a fière allure dans le style XP, mais qui devient hideuse dans le style classique.

Avez-vous des idées sur la façon de détecter le mode dans lequel se trouve l'utilisateur et de reformater les formulaires à la volée ?


Modifier la réponse :

Merci Daniel, on dirait que ça fonctionnera.J'utilise la première solution que vous avez publiée avec la fonction GetCurrentThemeName().

Je fais ce qui suit :

Déclaration de fonction :

 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

Corps du code :


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

GetCurrentThememeName (StringTheMemeName, 260, StringColorname, 260, StringSizename, 260) Msgbox (StringThememeName.ToString)

La MessageBox apparaît vide lorsque je suis dans le style/thème Windows Classic et affiche "C:\WINDOWS esources hemes\luna\luna.msstyles" si elle est dans le style/thème Windows XP.Je devrai faire un peu plus de vérification pour voir ce qui se passe si l'utilisateur définit un autre thème que ces deux-là, mais cela ne devrait pas être un gros problème.

Était-ce utile?

La solution

Essayez d'utiliser une combinaison de GetCurrentThemeName (Page MSDN) et DwmIsCompositionEnabled

J'ai lié le premier à PInvoke afin que vous puissiez simplement le déposer dans votre code, et pour le second, vous pouvez utiliser le code fourni dans le commentaire MSDN :

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

Voyez quels résultats vous obtenez de ces deux fonctions ;ils devraient suffire à déterminer quand vous souhaitez utiliser un thème différent !

Autres conseils

Personnellement, j'utilise ce qui suit pour voir si l'application fonctionne sous un thème :

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

Il y a le EstThemeActive Fonction WinAPI.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top