Sdílet prostřednictvím


Povolení vizuálních stylů

Toto téma vysvětluje, jak nakonfigurovat aplikaci, aby se zajistilo, že se běžné ovládací prvky zobrazí v preferovaném vizuálním stylu uživatele.

Toto téma obsahuje následující části.

Použití manifestů nebo direktiv k zajištění použití vizuálních stylů u aplikací

Pokud chcete aplikaci povolit používání vizuálních stylů, musíte použít ComCtl32.dll verze 6 nebo novější. Vzhledem k tomu, že verze 6 není distribuovatelná, je k dispozici pouze v případě, že vaše aplikace běží ve verzi Systému Windows, která ji obsahuje. Systém Windows se dodává s verzí 5 i verzí 6. ComCtl32.dll verze 6 obsahuje uživatelské ovládací prvky i společné ovládací prvky. Aplikace ve výchozím nastavení používají uživatelské ovládací prvky definované v User32.dll a běžné ovládací prvky definované v ComCtl32.dll verze 5. Seznam verzí knihovny DLL a jejich distribučních platforem naleznete v tématu Common Control Versions.

Pokud chcete, aby vaše aplikace používala vizuální styly, musíte přidat direktivu manifestu aplikace nebo kompilátoru, která indikuje, že ComCtl32.dll verze 6 by měla být použita, pokud je k dispozici.

Manifest aplikace umožňuje aplikaci určit, které verze sestavení vyžaduje. V systému Microsoft Win32 je sestavení sada knihoven DLL a seznam verzovatelných objektů, které jsou obsaženy v těchto knihovnách.

Manifesty jsou napsané v jazyce XML. Název souboru manifestu aplikace je název spustitelného souboru následovaný příponou názvu souboru .manifest; například MyApp.exe.manifest. Následující ukázkový manifest ukazuje, že první část popisuje samotný manifest. Následující tabulka ukazuje atributy nastavené prvkem assemblyIdentity v sekci popisu manifestu.

Atribut Popis
verze Verze manifestu. Verze musí být ve formátu major.minor.revision.build (tj. n.n.n,n, kde n <=65535).
architektura procesoru Procesor, pro který je aplikace vyvinuta.
Jméno Zahrnuje název společnosti, název produktu a název aplikace.
typ Typ aplikace, například Win32.

 

Ukázkový manifest také poskytuje popis vaší aplikace a určuje závislosti aplikace. Následující tabulka ukazuje atributy nastavené elementem assemblyIdentity v sekci závislostí.

Atribut Popis
typ Typ komponenty závislosti, například Win32.
Jméno Název komponenty.
verze Verze komponenty.
architektura procesoru Procesor, pro který je komponenta navržená.
publicKeyToken Klíčový token používaný s touto komponentou.
Jazyk Jazyk komponenty.

 

Následuje příklad souboru manifestu.

Důležitý

Nastavte processorArchitecture položku na X86, pokud vaše aplikace cílí na 32bitovou platformu Windows, nebo "amd64", pokud vaše aplikace cílí na 64bitovou platformu Windows. Můžete také zadat "*", což zajišťuje, že všechny platformy jsou cílené, jak je znázorněno v následujících příkladech.

 

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

Pokud používáte Microsoft Visual C++ 2005 nebo novější, můžete do zdrojového kódu přidat následující direktivu kompilátoru místo ručního vytvoření manifestu. Pro čitelnost je direktiva zde rozdělena na několik řádků.

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

Následující témata popisují postup použití vizuálních stylů u různých typů aplikací. Všimněte si, že formát manifestu je v každém případě stejný.

Použití ComCtl32.dll verze 6 v aplikaci, která používá pouze standardní rozšíření

Tady jsou příklady aplikací, které nepoužívají rozšíření třetích stran.

  • Kalkulačka
  • FreeCell (ve Windows Vista a Windows 7)
  • Minesweeper (ve Windows Vista a Windows 7)
  • Poznámkový blok
  • Solitaire (ve Windows Vista a Windows 7)

Vytvoření manifestu a povolení použití vizuálních stylů vaší aplikace.

  1. Odkaz na ComCtl32.lib a zavolání InitCommonControls .

  2. Přidejte soubor s názvem YourApp.exe.manifest do zdrojového stromu, který má formát manifestu 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. Přidejte manifest do souboru prostředků vaší aplikace následujícím způsobem:

    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.exe.manifest"
    

    Poznámka

    Když přidáte předchozí položku do prostředku, musíte ji naformátovat na jeden řádek. Případně můžete soubor manifestu XML umístit do stejného adresáře jako spustitelný soubor vaší aplikace. Operační systém nejprve načte manifest ze systému souborů a pak zkontroluje sekci prostředků spustitelného souboru. Přednost má verze systému souborů.

     

Při sestavování aplikace se manifest přidá jako binární prostředek.

Použití ComCtl32 verze 6 v Ovládacích panelech nebo v knihovně DLL, kterou spouští RunDll32.exe.

Vytvoření manifestu a povolení použití vizuálních stylů vaší aplikace.

  1. Odkaz na ComCtl32.lib a volání InitCommonControls.

  2. Přidejte soubor s názvem YourApp.cpl.manifest do zdrojového stromu, který má formát manifestu 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. Přidejte manifest do souboru prostředků vaší aplikace jako identifikátor prostředku 123.

Poznámka

Když vytvoříte aplikaci Ovládací panely, umístěte ji do příslušné kategorie. Ovládací panely teď podporují kategorizaci aplikací Ovládacích panelů. To znamená, že aplikace Ovládacích panelů mohou být přiřazeny identifikátory a odděleny do oblastí úkolů, jako jsou Například Přidat nebo Odebrat programy, Vzhled a Motivy nebo Datum, Čas, Jazyk a Místní možnosti.

 

Přidání podpory vizuálního stylu do rozšíření, modulu plug-in, připojovacího modulu konzoly MMC nebo knihovny DLL, která je začleněna do procesu

Podporu vizuálních stylů lze přidat do rozšíření, modulu plug-in, modulu snap-in konzoly MMC nebo knihovny DLL, která je přenesena do procesu. Pomocí následujícího postupu můžete například přidat podporu vizuálních stylů pro modul snap-in konzoly MMC (Microsoft Management Console).

  1. Zkompilujte modul snap-in pomocí příznaku -DISOLATION_AWARE_ENABLED nebo vložte následující příkaz před příkaz #include "windows.h".

    #define ISOLATION_AWARE_ENABLED 1
    

    Další informace o ISOLATION_AWARE_ENABLED naleznete v tématu Izolace komponent.

  2. Do zdrojového kódu modulu snap-in zahrňte společný hlavičkový soubor ovládacího prvku.

    #include <commctrl.h>
    
  3. Přidejte soubor s názvem YourApp.manifest do zdrojového stromu, který používá formát manifestu 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. Přidejte manifest do zdrojového souboru vašeho modulu snap-in. Podrobnosti o přidání manifestu do souboru prostředků najdete v tématu Použití ComCtl32 verze 6 v aplikaci, která používá rozšíření, moduly plug-in nebo knihovnu DLL, jež jsou zavedeny do procesu.

Vypnutí vizuálních stylů

Vizuální styly ovládacího prvku nebo všech ovládacích prvků v okně můžete vypnout voláním funkce SetWindowTheme následujícím způsobem:

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

V předchozím příkladu hwnd je popisovač okna, ve kterém chcete zakázat vizuální styly. Po volání se ovládací prvek vykresluje bez vizuálních stylů.

Použití vizuálních stylů s obsahem HTML

Stránky HTML, které upravují vlastnosti šablon stylů CSS (Cascading Style Sheets), jako je pozadí nebo ohraničení, nemají u nich použité vizuální styly. Zobrazí zadaný atribut CSS. Pokud je zadán jako součást obsahu, většina vlastností CSS se vztahuje na prvky, které mají použité vizuální styly.

Ve výchozím nastavení se styly vizuálů použijí na vnitřní ovládací prvky HTML na stránkách zobrazených v aplikaci Microsoft Internet Explorer 6 a novějších verzích. Pokud chcete vizuální styly stránky HTML vypnout, přidejte do oddílu <head> značku META. Tato technika se vztahuje také na obsah zabalený jako aplikace HTML (HTA). Chcete-li vypnout vizuální styly, musí být značka META následující:

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

Poznámka

Pokud nastavení prohlížeče a nastavení značky nesouhlasí, stránka nebude používat vizuální styly. Pokud je například značka META nastavená na ne a prohlížeč je nastavený tak, aby umožňoval vizuální styly, vizuální styly se na stránku nepoužijí. Pokud je ale prohlížeč nebo značka META nastavená na ano a druhá položka není zadaná, použijí se vizuální styly.

 

Vizuální styly můžou změnit rozložení obsahu. Pokud také nastavíte určité atributy na vnitřních ovládacích prvcích HTML, například šířku tlačítka, můžete zjistit, že popisek na tlačítku je v určitých vizuálních stylech nečitelný.

Musíte důkladně otestovat obsah pomocí vizuálních stylů, abyste zjistili, jestli použití vizuálních stylů má nepříznivý vliv na obsah a rozložení.

Pokud nejsou použity vizuální styly

Pokud se chcete vyhnout použití vizuálních stylů v okně nejvyšší úrovně, dejte oknu nenulovou oblast (SetWindowRgn). Systém předpokládá, že okno s oblastí bez hodnoty NULL je specializované okno, které nepoužívá vizuální styly. Podřízené okno přidružené k oknu nejvyšší úrovně bez vizuálních stylů může stále používat vizuální styly, i když je nadřazené okno nepoužívá.

Pokud chcete zakázat použití vizuálních stylů pro všechna okna v aplikaci, zavolejte SetThemeAppProperties a nepředávejte příznak STAP_ALLOW_NONCLIENT. Pokud aplikace nevolá SetThemeAppProperties, předpokládané hodnoty příznaku jsou STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS | STAP_ALLOW_WEBCONTENT. Předpokládané hodnoty způsobují, že vizuální styl je aplikován na neklientskou oblast, ovládací prvky a webový obsah.

Zajištění kompatibility aplikace s dřívějšími verzemi Windows

Většina architektury vizuálního stylu je navržená tak, aby bylo snadné pokračovat v dodávání produktu ve starších verzích Windows, které nepodporují změnu vzhledu ovládacích prvků. Při odesílání aplikace pro více než jeden operační systém mějte na paměti následující skutečnosti:

  • Ve verzích Windows starších než Windows 8 jsou vizuální styly vypnuté, když je zapnutý vysoký kontrast. Pro podporu vysokého kontrastu musí starší verze aplikace, která podporuje vizuální styly, poskytnout samostatnou cestu ke kódu pro správné kreslení prvků uživatelského rozhraní ve vysokém kontrastu. Ve Windows 8 je vysoký kontrast součástí vizuálních stylů; Aplikace systému Windows 8 (která obsahuje identifikátor GUID systému Windows 8 v oddílu kompatibility manifestu aplikace) však stále potřebuje poskytnout samostatnou cestu kódu pro správné vykreslení ve vysokém kontrastu ve Windows 7 dříve.
  • Pokud používáte funkce v ComCtl32.dll verze 6, jako je například zobrazení dlaždice nebo ovládací prvek odkazu, musíte zpracovat případ, kdy tyto ovládací prvky nejsou dostupné na počítači uživatele. ComCtl32.dll verze 6 není možné distribuovat.
  • Otestujte aplikaci, abyste se ujistili, že se nespoléháte na funkce ComCtl32.dll verze 6 bez první kontroly aktuální verze.
  • Neodkazujte na UxTheme.lib.
  • V případě, že styly vizuálů nefungují očekávaným způsobem, zapište kód pro zpracování chyb pro instance.
  • Instalace manifestu aplikace v dřívějších verzích neovlivní vykreslování ovládacích prvků.

vizuální styly