Dela via


Aktivera visuella stilar

Det här avsnittet beskriver hur du konfigurerar ditt program för att säkerställa att vanliga kontroller visas i användarens önskade visuella format.

Det här avsnittet innehåller följande delar.

Använda manifest eller direktiv för att säkerställa att visuella format kan tillämpas på program

Om du vill att programmet ska kunna använda visuella format måste du använda ComCtl32.dll version 6 eller senare. Eftersom version 6 inte kan omdistribueras är den endast tillgänglig när programmet körs på en version av Windows som innehåller den. Windows levereras med både version 5 och version 6. ComCtl32.dll version 6 innehåller både användarkontrollerna och de vanliga kontrollerna. Som standard använder program användarkontrollerna som definierats i User32.dll och de vanliga kontroller som definieras i ComCtl32.dll version 5. En lista över DLL-versioner och deras distributionsplattformar finns i Common Control-versioner.

Om du vill att programmet ska använda visuella format måste du lägga till ett programmanifest eller kompilatordirektiv som anger att ComCtl32.dll version 6 ska användas om det är tillgängligt.

Med ett programmanifest kan ett program ange vilka versioner av en sammansättning som krävs. I Microsoft Win32 är en sammansättning en uppsättning DLL:er och en lista över versionsbara objekt som finns i dessa DLL:er.

Manifest skrivs i XML. Namnet på programmanifestfilen är namnet på den körbara filen följt av filnamnstillägget .manifest. till exempel MyApp.exe.manifest. Följande exempelmanifest visar att det första avsnittet beskriver själva manifestet. I följande tabell visas attributen som anges av assemblyIdentity-elementet i avsnittet manifestbeskrivning.

Attribut Beskrivning
version Version av manifestet. Versionen måste vara i formatet major.minor.revision.build (d.v.s. n.n.n, där n <=65535).
processorarkitektur Processor som ditt program har utvecklats för.
Namn Innehåller företagsnamn, produktnamn och programnamn.
typ Typ av program, till exempel Win32.

 

Exempelmanifestet innehåller också en beskrivning av ditt program och anger programberoenden. I följande tabell visas attributen som anges av assemblyIdentity-elementet i beroendeavsnittet.

Attribut Beskrivning
typ Typ av beroendekomponent, till exempel Win32.
Namn Komponentens namn.
version Version av komponenten.
processorarkitektur Processor som komponenten är avsedd för.
offentligNyckelToken Nyckeltoken som används med den här komponenten.
Språk Komponentens språk.

 

Följande är ett exempel på en manifestfil.

Viktig

Ange -processorArchitecture-posten till "X86" om ditt program riktar sig mot 32-bitars Windows-plattformen, eller till "amd64" om ditt program riktar sig mot 64-bitars Windows-plattformen. Du kan också ange "*", vilket säkerställer att alla plattformar riktas mot, som visas i följande exempel.

 

<?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>

Om du använder Microsoft Visual C++ 2005 eller senare kan du lägga till följande kompilatordirektiv i källkoden i stället för att skapa ett manifest manuellt. För läsbarhet är direktivet indelat i flera rader här.

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

I följande avsnitt beskrivs stegen för att tillämpa visuella format på olika typer av program. Observera att manifestformatet är detsamma i varje enskilt fall.

Använda ComCtl32.dll version 6 i ett program som endast använder standardtillägg

Följande är exempel på program som inte använder tillägg från tredje part.

  • Kalkylator
  • FreeCell (i Windows Vista och Windows 7)
  • Minesweeper (i Windows Vista och Windows 7)
  • Anteckningsblock
  • Patiens (i Windows Vista och Windows 7)

Om du vill skapa ett manifest och göra det möjligt för ditt program att använda visuella format.

  1. Länka till ComCtl32.lib och anropa InitCommonControls.

  2. Lägg till en fil med namnet YourApp.exe.manifest i källträdet som har XML-manifestformatet.

    <?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. Lägg till manifestet i programmets resursfil på följande sätt:

    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.exe.manifest"
    

    Anteckning

    När du lägger till föregående post i resursen måste du formatera den på en rad. Du kan också placera XML-manifestfilen i samma katalog som programmets körbara fil. Operativsystemet läser först in manifestet från filsystemet och kontrollerar sedan resursavsnittet i den körbara filen. Filsystemversionen har företräde.

     

När du skapar programmet läggs manifestet till som en binär resurs.

Använda ComCtl32 version 6 på Kontrollpanelen eller en DLL som körs av RunDll32.exe

Om du vill skapa ett manifest och göra det möjligt för ditt program att använda visuella format.

  1. Länka till ComCtl32.lib och anropa InitCommonControls.

  2. Lägg till en fil med namnet YourApp.cpl.manifest i källträdet som har XML-manifestformatet.

    <?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. Lägg till manifestet i programmets resursfil som resurs-ID 123.

Anteckning

När du skapar ett kontrollpanelsprogram placerar du det i lämplig kategori. Kontrollpanelen stöder nu kategorisering av kontrollpanelsprogram. Det innebär att Kontrollpanelens program kan tilldelas identifierare och delas upp i aktivitetsområden som Lägg till eller ta bort program, Utseende och teman, eller datum, tid, språk och regionala alternativ.

 

Lägga till stöd för visuell stil till ett tillägg, plugin-program, MMC-snapin-modul eller en DLL som integreras i en process

Stöd för visuella stilar kan läggas till i ett tillägg, plugin, MMC-snapin-modul eller en DLL som integreras i en process. För att till exempel lägga till stöd för visuella format i en Microsoft Management Console (MMC) snapin-modul, använd följande steg.

  1. Kompilera snapin-modulen med flaggan -DISOLATION_AWARE_ENABLED eller infoga följande instruktion före instruktionen #include "windows.h".

    #define ISOLATION_AWARE_ENABLED 1
    

    Mer information om ISOLATION_AWARE_ENABLED finns i Isolering av komponenter.

  2. Inkludera den gemensamma kontrollhuvudfilen i din snap-in källkod.

    #include <commctrl.h>
    
  3. Lägg till en fil med namnet YourApp.manifest i källträdet som använder XML-manifestformatet.

    <?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. Lägg till manifestet i snapin-modulens resursfil. Mer information om hur du lägger till ett manifest i en resursfil finns i Använda ComCtl32 version 6 i ett program som använder tillägg, plugin-program eller en DLL som förs in i en process.

Inaktivera visuella stilar

Du kan inaktivera visuella format för en kontroll eller för alla kontroller i ett fönster genom att anropa funktionen SetWindowTheme enligt följande:

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

I föregående exempel är hwnd handtaget för fönstret där visuella formatmallar ska inaktiveras. Efter anropet renderas kontrollelementet utan visuella stilar.

Använda visuella format med HTML-innehåll

HTML-sidor som ändrar CSS-egenskaperna (Cascading Style Sheets), till exempel bakgrund eller kantlinje, har inte visuella format som tillämpas på dem. De visar det angivna CSS-attributet. När de anges som en del av innehållet gäller de flesta CSS-egenskaper för element som har visuella format.

Som standard tillämpas visuella format på inbyggda HTML-kontroller på sidor som visas i Microsoft Internet Explorer 6 och senare versioner. Om du vill inaktivera visuella format för en HTML-sida lägger du till en META-tagg i avsnittet <head>. Den här tekniken gäller även för innehåll som paketeras som HTML-program (HTAs). Om du vill inaktivera visuella format måste META-taggen vara följande:

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

Anteckning

Om webbläsarinställningen och tagginställningen inte överensstämmer kommer sidan inte att använda visuella format. Om META-taggen till exempel är inställd på "nej" och webbläsaren är inställd på att aktivera visuella format, tillämpas inte visuella format på sidan. Men om antingen webbläsaren eller META-taggen är inställd på "ja" och det andra objektet inte har angetts, tillämpas visuella formatmallar.

 

Visuella format kan ändra layouten för ditt innehåll. Om du anger vissa attribut för inbyggda HTML-kontroller, till exempel bredden på en knapp, kanske du upptäcker att etiketten på knappen är oläslig under vissa visuella format.

Du måste noggrant testa ditt innehåll med hjälp av visuella format för att avgöra om tillämpning av visuella format har en negativ effekt på ditt innehåll och din layout.

När visuella format inte används

Om du vill undvika att använda visuella format i ett fönster på den översta nivån ger du fönstret en icke-null-region (SetWindowRgn). Systemet förutsätter att ett fönster med en region som inte är NULL är ett specialiserat fönster som inte använder visuella format. Ett barnfönster associerat med ett toppnivåfönster utan visuella stilar kan fortfarande använda visuella stilar även om föräldrafönstret inte gör det.

Om du vill inaktivera användningen av visuella format för alla fönster i programmet anropar du SetThemeAppProperties och skickar inte flaggan STAP_ALLOW_NONCLIENT. Om ett program inte anropar SetThemeAppPropertiesär de antagna flaggvärdena STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS | STAP_ALLOW_WEBCONTENT. De antagna värdena gör att icke-klientområdet, kontrollerna och webbinnehållet har en visuell stil.

Göra ditt program kompatibelt med tidigare versioner av Windows

Mycket av arkitekturen för visuell stil är utformad för att göra det enkelt att fortsätta att skicka produkten till tidigare versioner av Windows som inte har stöd för att ändra utseendet på kontroller. När du skickar ett program för mer än ett operativsystem bör du vara medveten om följande:

  • I versioner av Windows före Windows 8 är visuella stilar avstängda när hög kontrast är på. För att stödja högkontrast måste ett äldre program som stöder visuella format tillhandahålla en separat kodsökväg för att korrekt rita gränssnittselement i hög kontrast. I Windows 8 är högkontrast en del av visuella format. Men ett Windows 8-program (ett som innehåller Windows 8 GUID i kompatibilitetsavsnittet i dess programmanifest) måste fortfarande tillhandahålla en separat kodsökväg för att återges korrekt i hög kontrast på Windows 7 en tidigare.
  • Om du använder funktionerna i ComCtl32.dll version 6, till exempel panelvyn eller länkkontrollen, måste du hantera det fall där kontrollerna inte är tillgängliga på användarens dator. ComCtl32.dll version 6 kan inte omdistribueras.
  • Testa programmet för att se till att du inte förlitar dig på funktioner i ComCtl32.dll version 6 utan att först söka efter den aktuella versionen.
  • Länka inte till UxTheme.lib.
  • Skriv felhanteringskod för instanser när visuella format inte fungerar som förväntat.
  • Om du installerar programmets manifest i tidigare versioner påverkas inte återgivningen av kontroller.

visuella stilar