Udostępnij za pośrednictwem


Włączanie stylów wizualnych

W tym temacie wyjaśniono, jak skonfigurować aplikację, aby upewnić się, że typowe kontrolki są wyświetlane w preferowanym stylu wizualizacji użytkownika.

Ten temat zawiera następujące sekcje.

Korzystanie z manifestów lub dyrektyw w celu upewnienia się, że style wizualne mogą być stosowane do aplikacji

Aby umożliwić aplikacji używanie stylów wizualnych, należy użyć ComCtl32.dll w wersji 6 lub nowszej. Ponieważ wersja 6 nie jest redystrybuowalna, jest dostępna tylko wtedy, gdy aplikacja działa na wersji systemu Windows, która ją zawiera. System Windows jest dostarczany z wersją 5 i wersją 6. ComCtl32.dll wersja 6 zawiera zarówno kontrolki użytkownika, jak i typowe kontrolki. Domyślnie aplikacje używają kontrolek użytkownika zdefiniowanych w User32.dll i wspólnych kontrolek zdefiniowanych w ComCtl32.dll wersji 5. Aby uzyskać listę wersji bibliotek DLL i ich platform dystrybucyjnych, zobacz Common Control Versions.

Jeśli chcesz, aby aplikacja korzystała ze stylów wizualnych, musisz dodać manifest aplikacji lub dyrektywę kompilatora wskazującą, że ComCtl32.dll w wersji 6 powinna być używana, jeśli jest dostępna.

Manifest aplikacji umożliwia aplikacji określenie, których wersji zestawu wymaga. W Microsoft Win32 zgromadzenie to zestaw bibliotek DLL i lista wersjonowalnych obiektów zawartych w tych bibliotekach DLL.

Manifesty są zapisywane w formacie XML. Nazwa pliku manifestu aplikacji to nazwa pliku wykonywalnego, po którym następuje rozszerzenie nazwy pliku manifest; na przykład MyApp.exe.manifest. Poniższy przykładowy manifest pokazuje, że pierwsza sekcja opisuje sam manifest. W poniższej tabeli przedstawiono atrybuty ustawione przez element assemblyIdentity w sekcji opisu manifestu.

Atrybut Opis
Wersja Wersja manifestu. Wersja musi być w postaci major.minor.revision.build (czyli n.n.n.n., gdzie n <=65535).
architektura procesora Procesor, dla którego jest opracowywana aplikacja.
nazwa Zawiera nazwę firmy, nazwę produktu i nazwę aplikacji.
typ Typ aplikacji, taki jak Win32.

 

Przykładowy manifest zawiera również opis aplikacji i określa zależności aplikacji. W poniższej tabeli przedstawiono atrybuty ustawione przez element assemblyIdentity w sekcji zależności.

Atrybut Opis
typ Typ składnika zależności, taki jak Win32.
nazwa Nazwa składnika.
Wersja Wersja składnika.
architektura procesora Procesor, dla którego jest przeznaczony składnik.
publicKeyToken Token klucza używany z tym składnikiem.
Język Język składnika.

 

Poniżej znajduje się przykład pliku manifestu.

Ważny

Ustaw wpis processorArchitecture na "X86", jeśli aplikacja jest przeznaczona dla 32-bitowej platformy systemu Windows lub "amd64", jeśli aplikacja jest przeznaczona dla 64-bitowej platformy windows. Można również wskazać "*", co zapewnia, że wszystkie platformy są uwzględnione, jak pokazano w poniższych przykładach.

 

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

Jeśli używasz programu Microsoft Visual C++ 2005 lub nowszego, możesz dodać następującą dyrektywę kompilatora do kodu źródłowego zamiast ręcznie utworzyć manifest. W celu zapewnienia czytelności dyrektywa jest w tym miejscu podzielona na kilka wierszy.

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

W poniższych tematach opisano kroki stosowania stylów wizualizacji do różnych typów aplikacji. Zwróć uwagę, że format manifestu jest taki sam w każdym przypadku.

Używanie ComCtl32.dll w wersji 6 w aplikacji, która używa tylko standardowych rozszerzeń

Poniżej przedstawiono przykłady aplikacji, które nie korzystają z rozszerzeń innych firm.

  • Kalkulator
  • FreeCell (w systemach Windows Vista i Windows 7)
  • Minesweeper (w systemach Windows Vista i Windows 7)
  • Notatnik
  • Pasjans (w systemach Windows Vista i Windows 7)

Aby utworzyć manifest i umożliwić aplikacji używanie stylów wizualnych.

  1. Połącz się z comCtl32.lib i wywołaj InitCommonControls.

  2. Dodaj plik o nazwie YourApp.exe.manifest do drzewa źródłowego, który ma format 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. Dodaj manifest do pliku zasobów aplikacji w następujący sposób:

    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.exe.manifest"
    

    Nota

    Po dodaniu poprzedniego wpisu do zasobu należy go sformatować w jednym wierszu. Alternatywnie możesz umieścić plik manifestu XML w tym samym katalogu co plik wykonywalny aplikacji. System operacyjny najpierw załaduje manifest z systemu plików, a następnie sprawdzi sekcję zasobów pliku wykonywalnego. Wersja systemu plików ma pierwszeństwo.

     

Podczas kompilowania aplikacji manifest zostanie dodany jako zasób binarny.

Używanie comCtl32 w wersji 6 w Panelu sterowania lub biblioteki DLL uruchamianej przez RunDll32.exe

Aby utworzyć manifest i umożliwić aplikacji używanie stylów wizualnych.

  1. Połącz się z comCtl32.lib i wywołaj InitCommonControls.

  2. Dodaj plik o nazwie YourApp.cpl.manifest do drzewa źródłowego, który ma format 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. Dodaj manifest do pliku zasobu aplikacji jako identyfikator zasobu 123.

Notatka

Podczas tworzenia aplikacji Panelu sterowania umieść ją w odpowiedniej kategorii. Panel sterowania teraz obsługuje kategoryzację aplikacji. Oznacza to, że aplikacje Panelu sterowania można przypisywać identyfikatory i rozdzielać je na obszary zadań, takie jak Dodawanie lub usuwanie programów, wyglądu i motywów, daty, godziny, języka i opcji regionalnych.

 

Dodawanie obsługi stylu wizualnego do rozszerzeń, wtyczek, przystawek MMC lub bibliotek DLL włączanych do procesu

Obsługę stylów wizualizacji można dodać do rozszerzenia, wtyczki, przystawki MMC lub biblioteki DLL wprowadzonej do procesu. Na przykład użyj poniższych kroków, aby dodać obsługę stylów wizualnych dla przystawki programu Microsoft Management Console (MMC).

  1. Skompiluj przystawkę za pomocą flagi -DISOLATION_AWARE_ENABLED lub wstaw następującą instrukcję przed instrukcją #include "windows.h".

    #define ISOLATION_AWARE_ENABLED 1
    

    Aby uzyskać więcej informacji na temat ISOLATION_AWARE_ENABLED, zobacz Izolowanie składników.

  2. Dołącz wspólny plik nagłówka kontrolki do źródła przystawki.

    #include <commctrl.h>
    
  3. Dodaj plik o nazwie YourApp.manifest do drzewa źródłowego, który używa formatu 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. Dodaj manifest do pliku zasobów wtyczki. Zobacz Używanie ComCtl32 w wersji 6 w aplikacji, która korzysta z rozszerzeń, wtyczek lub bibliotek DLL, które są wprowadzane do procesu, aby uzyskać szczegółowe informacje na temat dodawania manifestu do pliku zasobów.

Wyłączanie stylów wizualnych

Style wizualne dla kontrolki lub wszystkich kontrolek w oknie można wyłączyć, wywołując funkcję SetWindowTheme w następujący sposób:

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

W poprzednim przykładzie hwnd jest uchwytem okna, w którym można wyłączyć style wizualne. Po wywołaniu kontrolka jest renderowana bez stylów wizualnych.

Używanie stylów wizualnych z zawartością HTML

Strony HTML modyfikujące właściwości kaskadowych arkuszy stylów (CSS), takie jak tło lub obramowanie, nie mają do nich zastosowanych stylów wizualnych. Wyświetlają określony atrybut CSS. Po określeniu jako części zawartości większość właściwości CSS ma zastosowanie do elementów, które mają zastosowane style wizualizacji.

Domyślnie style wizualizacji są stosowane do wewnętrznych kontrolek HTML na stronach wyświetlanych w programie Microsoft Internet Explorer 6 i nowszych wersjach. Aby wyłączyć style wizualne dla strony HTML, dodaj tag META do sekcji <head>. Ta technika dotyczy również zawartości spakowanej jako aplikacje HTML (HTA). Aby wyłączyć style wizualizacji, tag META musi być następujący:

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

Notatka

Jeśli ustawienie przeglądarki i ustawienie tagu nie zostaną zgodne, strona nie zastosuje stylów wizualnych. Jeśli na przykład tag META jest ustawiony na "nie", a przeglądarka jest ustawiona na włączenie stylów wizualizacji, style wizualizacji nie zostaną zastosowane do strony. Jeśli jednak dla przeglądarki lub tagu META ustawiono wartość "tak", a drugi element nie zostanie określony, zostaną zastosowane style wizualizacji.

 

Style wizualne mogą zmieniać układ zawartości. Ponadto jeśli ustawisz pewne atrybuty na wewnętrznych kontrolkach HTML, takich jak szerokość przycisku, może się okazać, że etykieta na przycisku jest nieczytelna w niektórych stylach wizualnych.

Musisz dokładnie przetestować zawartość przy użyciu stylów wizualnych, aby określić, czy stosowanie stylów wizualizacji ma negatywny wpływ na zawartość i układ.

Gdy style wizualne nie są stosowane

Aby uniknąć stosowania stylów wizualizacji do okna najwyższego poziomu, nadaj okno regionowi inne niż null (SetWindowRgn). System zakłada, że okno z regionem różnym od NULL jest wyspecjalizowanym oknem, które nie korzysta ze stylów wizualnych. Okno podrzędne powiązane z oknem najwyższego poziomu bez stylów wizualnych może nadal stosować style wizualne, mimo że okno nadrzędne tego nie robi.

Jeśli chcesz wyłączyć używanie stylów wizualnych dla wszystkich okien w aplikacji, wywołaj SetThemeAppProperties i nie przekaż flagi STAP_ALLOW_NONCLIENT. Jeśli aplikacja nie wywołuje SetThemeAppProperties, zakładane wartości flagi są STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS | STAP_ALLOW_WEBCONTENT. Zakładane wartości powodują, że obszar poza klientem, kontrolki i zawartość internetowa mają zastosowany styl wizualny.

Tworzenie aplikacji zgodnej z wcześniejszymi wersjami systemu Windows

Większość architektury stylu wizualnego została zaprojektowana tak, aby ułatwić dalsze dostarczanie produktu we wcześniejszych wersjach systemu Windows, które nie obsługują zmiany wyglądu kontrolek. Podczas wysyłania aplikacji dla więcej niż jednego systemu operacyjnego należy pamiętać o następujących kwestiach:

  • W wersjach systemu Windows wcześniejszych niż Windows 8 style wizualne są wyłączone, gdy duży kontrast jest włączony. Aby zapewnić duży kontrast, starsza aplikacja, która obsługuje style wizualne, musi zapewnić oddzielną ścieżkę kodu, aby prawidłowo narysować elementy interfejsu użytkownika w dużym kontraście. W systemie Windows 8 duży kontrast jest częścią stylów wizualnych; jednak aplikacja systemu Windows 8 (która zawiera identyfikator GUID systemu Windows 8 w sekcji zgodności manifestu aplikacji) nadal musi zapewnić oddzielną ścieżkę kodu, aby prawidłowo wyświetlać się w wysokim kontraście na systemach Windows 7 i starszych.
  • Jeśli używasz funkcji w ComCtl32.dll wersji 6, takich jak widok kafelkowy lub kontrola łączy, musisz obsłużyć przypadek, w którym te kontrolki nie są dostępne na komputerze użytkownika. ComCtl32.dll w wersji 6 nie podlega dystrybucji.
  • Przetestuj aplikację, aby upewnić się, że nie korzystasz z funkcji ComCtl32.dll w wersji 6 bez wcześniejszego sprawdzania bieżącej wersji.
  • Nie należy łączyć się z biblioteką UxTheme.lib.
  • Napisz kod obsługi błędów dla wystąpień, gdy style wizualizacji nie działają zgodnie z oczekiwaniami.
  • Zainstalowanie manifestu aplikacji we wcześniejszych wersjach nie wpłynie na renderowanie kontrolek.

Style wizualne