Activation des styles visuels

Cette rubrique explique comment configurer votre application pour vous assurer que les contrôles courants sont affichés dans le style visuel préféré de l’utilisateur.

Cette rubrique comprend les sections suivantes.

Utilisation de manifestes ou de directives pour s’assurer que des styles visuels peuvent être appliqués aux applications

Pour permettre à votre application d’utiliser des styles visuels, vous devez utiliser ComCtl32.dll version 6 ou ultérieure. Étant donné que la version 6 n’est pas redistribuable, elle est disponible uniquement lorsque votre application s’exécute sur une version de Windows qui la contient. Windows est fourni avec les versions 5 et 6. ComCtl32.dll version 6 contient à la fois les contrôles utilisateur et les contrôles communs. Par défaut, les applications utilisent les contrôles utilisateur définis dans User32.dll et les contrôles communs définis dans ComCtl32.dll version 5. Pour obtenir la liste des versions de DLL et de leurs plateformes de distribution, consultez Versions de contrôle communs.

Si vous souhaitez que votre application utilise des styles visuels, vous devez ajouter un manifeste d’application ou une directive de compilateur qui indique que ComCtl32.dll version 6 doit être utilisée si elle est disponible.

Un manifeste d’application permet à une application de spécifier les versions d’un assembly dont elle a besoin. Dans Microsoft Win32, un assembly est un ensemble de DLL et une liste d’objets pouvant être versionnables contenus dans ces DLL.

Les manifestes sont écrits en XML. Le nom du fichier manifeste d’application est le nom de votre exécutable suivi de l’extension de nom de fichier .manifest ; par exemple, MyApp.exe.manifest. L’exemple de manifeste suivant montre que la première section décrit le manifeste lui-même. Le tableau suivant montre les attributs définis par l’élément assemblyIdentity dans la section description du manifeste.

Attribut Description
version Version du manifeste. La version doit être au format major.minor.revision.build (c’est-à-dire, n.n.n.n, où n <=65535).
processorArchitecture Processeur pour lequel votre application est développée.
name Inclut le nom de l’entreprise, le nom du produit et le nom de l’application.
type Type de votre application, tel que Win32.

 

L’exemple de manifeste fournit également une description de votre application et spécifie les dépendances de l’application. Le tableau suivant montre les attributs définis par l’élément assemblyIdentity dans la section dépendance.

Attribut Description
type Type du composant de dépendance, tel que Win32.
name Nom du composant.
version Numéro de version du composant.
processorArchitecture Processeur pour lequel le composant est conçu.
publicKeyToken Jeton de clé utilisé avec ce composant.
langage Langue du composant.

 

Voici un exemple de fichier manifeste.

Important

Définissez l’entrée processorArchitecture sur « X86 » si votre application cible la plateforme Windows 32 bits, ou sur « amd64 » si votre application cible la plateforme Windows 64 bits. Vous pouvez également spécifier « * », ce qui garantit que toutes les plateformes sont ciblées, comme illustré dans les exemples suivants.

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="*"
    name="CompanyName.ProductName.YourApplication"
    type="win32"
/>
<description>Your application description here.</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>

Si vous utilisez Microsoft Visual C++ 2005 ou version ultérieure, vous pouvez ajouter la directive de compilateur suivante à votre code source au lieu de créer manuellement un manifeste. Pour plus de lisibilité, la directive est divisée en plusieurs lignes ici.

#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

Les rubriques suivantes décrivent les étapes d’application de styles visuels à différents types d’applications. Notez que le format de manifeste est le même dans chaque cas.

Utilisation de ComCtl32.dll version 6 dans une application qui utilise uniquement des extensions standard

Voici des exemples d’applications qui n’utilisent pas d’extensions tierces.

  • Calculatrice
  • FreeCell (dans Windows Vista et Windows 7)
  • Dragueur de mines (dans Windows Vista et Windows 7)
  • Bloc-notes
  • Solitaire (dans Windows Vista et Windows 7)

Pour créer un manifeste et permettre à votre application d’utiliser des styles visuels.

  1. Créez un lien vers ComCtl32.lib et appelez InitCommonControls.

  2. Ajoutez un fichier appelé YourApp.exe.manifest à votre arborescence source au format manifeste XML.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        version="1.0.0.0"
        processorArchitecture="*"
        name="CompanyName.ProductName.YourApplication"
        type="win32"
    />
    <description>Your application description here.</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
        </dependentAssembly>
    </dependency>
    </assembly>
    
  3. Ajoutez le manifeste au fichier de ressources de votre application comme suit :

    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.exe.manifest"
    

    Notes

    Lorsque vous ajoutez l’entrée précédente à la ressource, vous devez la mettre en forme sur une ligne. Vous pouvez également placer le fichier manifeste XML dans le même répertoire que le fichier exécutable de votre application. Le système d’exploitation charge d’abord le manifeste à partir du système de fichiers, puis case activée la section de ressources de l’exécutable. La version du système de fichiers est prioritaire.

     

Lorsque vous générez votre application, le manifeste est ajouté en tant que ressource binaire.

Utilisation de ComCtl32 version 6 dans Panneau de configuration ou d’une DLL exécutée par RunDll32.exe

Pour créer un manifeste et permettre à votre application d’utiliser des styles visuels.

  1. Créez un lien vers ComCtl32.lib et appelez InitCommonControls.

  2. Ajoutez un fichier appelé YourApp.cpl.manifest à votre arborescence source au format manifeste XML.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        version="1.0.0.0"
        processorArchitecture="*"
        name="CompanyName.ProductName.YourApplication"
        type="win32"
    />
    <description>Your application description here.</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
        </dependentAssembly>
    </dependency>
    </assembly>
    
  3. Ajoutez le manifeste au fichier de ressources de votre application en tant qu’ID de ressource 123.

Notes

Lorsque vous créez une application Panneau de configuration, placez-la dans la catégorie appropriée. Panneau de configuration prend désormais en charge la catégorisation des applications Panneau de configuration. Cela signifie que Panneau de configuration applications peuvent se voir attribuer des identificateurs et les séparer en zones de tâches telles que Ajouter ou supprimer des programmes, Apparence et Thèmes, ou Date, Heure, Langue et Options régionales.

 

Ajout de la prise en charge du style visuel à une extension, un plug-in, un composant logiciel enfichable MMC ou une DLL introduite dans un processus

La prise en charge des styles visuels peut être ajoutée à une extension, un plug-in, un composant logiciel enfichable MMC ou une DLL qui est introduite dans un processus. Par exemple, procédez comme suit pour ajouter la prise en charge des styles visuels à un composant logiciel enfichable MMC (Microsoft Management Console).

  1. Compilez votre composant logiciel enfichable avec l’indicateur -DISOLATION_AWARE_ENABLED ou insérez l’instruction suivante avant l’instruction « windows.h » #include.

    #define ISOLATION_AWARE_ENABLED 1
    

    Pour plus d’informations sur ISOLATION_AWARE_ENABLED, consultez Isolation des composants.

  2. Incluez le fichier d’en-tête de contrôle commun dans votre source de composant logiciel enfichable.

    #include <commctrl.h>
    
  3. Ajoutez un fichier appelé YourApp.manifest à votre arborescence source qui utilise le format manifeste XML.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        version="1.0.0.0"
        processorArchitecture="*"
        name="CompanyName.ProductName.YourApplication"
        type="win32"
    />
    <description>Your application description here.</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
        </dependentAssembly>
    </dependency>
    </assembly>
    
  4. Ajoutez le manifeste au fichier de ressources de votre composant logiciel enfichable. Pour plus d’informations sur l’ajout d’un manifeste à un fichier de ressources , consultez Utilisation de ComCtl32 version 6 dans une application qui utilise des extensions, des plug-ins ou une DLL introduite dans un processus .

Désactivation des styles visuels

Vous pouvez désactiver les styles visuels pour un contrôle ou pour tous les contrôles d’une fenêtre en appelant la fonction SetWindowTheme comme suit :

SetWindowTheme(hwnd, L" ", L" ");

Dans l’exemple précédent, hwnd est le handle de la fenêtre dans laquelle désactiver les styles visuels. Après l’appel, le contrôle s’affiche sans styles visuels.

Utilisation de styles visuels avec du contenu HTML

Les pages HTML qui modifient les propriétés CSS (Cascading Style Sheets), telles que l’arrière-plan ou la bordure, n’ont pas de styles visuels appliqués. Ils affichent l’attribut CSS spécifié. Lorsqu’elles sont spécifiées dans le cadre du contenu, la plupart des propriétés CSS s’appliquent aux éléments qui ont des styles visuels appliqués.

Par défaut, les styles visuels sont appliqués aux contrôles HTML intrinsèques sur les pages affichées dans Microsoft Internet Explorer 6 et versions ultérieures. Pour désactiver les styles visuels d’une page HTML, ajoutez une balise META à la <head> section. Cette technique s’applique également au contenu empaqueté en tant qu’applications HTML (HTA). Pour désactiver les styles visuels, la balise META doit être la suivante :

<META HTTP-EQUIV="MSThemeCompatible" CONTENT="no">

Notes

Si le paramètre de navigateur et le paramètre de balise ne sont pas d’accord, la page n’applique pas de styles visuels. Par exemple, si la balise META a la valeur « non » et que le navigateur est défini pour activer les styles visuels, les styles visuels ne sont pas appliqués à la page. Toutefois, si le navigateur ou la balise META est défini sur « oui » et que l’autre élément n’est pas spécifié, des styles visuels sont appliqués.

 

Les styles visuels peuvent modifier la disposition de votre contenu. En outre, si vous définissez certains attributs sur des contrôles HTML intrinsèques, tels que la largeur d’un bouton, vous pouvez constater que l’étiquette sur le bouton est illisible sous certains styles visuels.

Vous devez tester soigneusement votre contenu à l’aide de styles visuels pour déterminer si l’application de styles visuels a un effet négatif sur votre contenu et votre disposition.

Quand les styles visuels ne sont pas appliqués

Pour éviter d’appliquer des styles visuels à une fenêtre de niveau supérieur, attribuez à la fenêtre une région non null (SetWindowRgn). Le système suppose qu’une fenêtre avec une région non NULL est une fenêtre spécialisée qui n’utilise pas de styles visuels. Une fenêtre enfant associée à une fenêtre de niveau supérieur non visuelle peut toujours appliquer des styles visuels même si la fenêtre parente ne le fait pas.

Si vous souhaitez désactiver l’utilisation de styles visuels pour toutes les fenêtres de votre application, appelez SetThemeAppProperties et ne passez pas l’indicateur STAP_ALLOW_NONCLIENT. Si une application n’appelle pas SetThemeAppProperties, les valeurs d’indicateur supposées sont STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS | STAP_ALLOW_WEBCONTENT. Les valeurs supposées entraînent l’application d’un style visuel à la zone non cliente, aux contrôles et au contenu web.

Rendre votre application compatible avec les versions antérieures de Windows

Une grande partie de l’architecture de style visuel est conçue pour simplifier l’expédition de votre produit sur des versions antérieures de Windows qui ne prennent pas en charge la modification de l’apparence des contrôles. Lorsque vous expédiez une application pour plusieurs systèmes d’exploitation, tenez compte des éléments suivants :

  • Dans les versions de Windows antérieures à Windows 8, les styles visuels sont désactivés lorsque le contraste est élevé. Pour prendre en charge un contraste élevé, une application héritée qui prend en charge les styles visuels doit fournir un chemin de code distinct pour dessiner correctement les éléments d’interface utilisateur avec un contraste élevé. Dans Windows 8, le contraste élevé fait partie des styles visuels ; toutefois, une application Windows 8 (qui inclut le GUID Windows 8 dans la section de compatibilité de son manifeste d’application) doit toujours fournir un chemin de code distinct pour un rendu correct en contraste élevé sur Windows 7 et antérieur.
  • Si vous utilisez les fonctionnalités de ComCtl32.dll version 6, telles que la vue de vignette ou le contrôle de lien, vous devez gérer le cas où ces contrôles ne sont pas disponibles sur l’ordinateur de votre utilisateur. ComCtl32.dll version 6 n’est pas redistribuable.
  • Testez votre application pour vous assurer que vous ne vous fiez pas aux fonctionnalités de ComCtl32.dll version 6 sans vérifier au préalable la version actuelle.
  • Ne créez pas de lien vers UxTheme.lib.
  • Écrivez du code de gestion des erreurs pour les instances lorsque les styles visuels ne fonctionnent pas comme prévu.
  • L’installation du manifeste de votre application dans les versions antérieures n’affecte pas le rendu des contrôles.

Styles visuels