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.
- używanie manifestów lub dyrektyw w celu zapewnienia, że style wizualne mogą być stosowane do aplikacji
- Korzystanie z ComCtl32.dll wersja 6 w aplikacji, która używa tylko standardowych rozszerzeń
- Użycie ComCtl32 w wersji 6 w Panelu Sterowania lub biblioteki DLL uruchamianej przez RunDll32.exe
- dodawanie obsługi stylu wizualnego do rozszerzenia, wtyczki, przystawki MMC lub biblioteki DLL wprowadzonej do procesu
- wyłączanie stylów wizualnych
- Używanie stylów wizualnych z zawartością HTML
- gdy style wizualne nie są stosowane
- tworzenie aplikacji zgodnej z wcześniejszymi wersjami systemu Windows
- Tematy pokrewne
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.
Połącz się z comCtl32.lib i wywołaj InitCommonControls.
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>
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.
Połącz się z comCtl32.lib i wywołaj InitCommonControls.
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>
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).
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.
Dołącz wspólny plik nagłówka kontrolki do źródła przystawki.
#include <commctrl.h>
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>
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.
Tematy pokrewne