Aktivieren von visuellen Stilen

In diesem Thema wird erläutert, wie Sie Ihre Anwendung konfigurieren, um sicherzustellen, dass allgemeine Steuerelemente im bevorzugten visuellen Stil des Benutzers angezeigt werden.

Das Thema enthält folgende Abschnitte:

Verwenden von Manifesten oder Anweisungen, um sicherzustellen, dass visuelle Stile auf Anwendungen angewendet werden können

Damit Ihre Anwendung visuelle Stile verwenden kann, müssen Sie ComCtl32.dll Version 6 oder höher verwenden. Da Version 6 nicht verteilbar ist, ist sie nur verfügbar, wenn Ihre Anwendung unter einer Windows-Version ausgeführt wird, die sie enthält. Windows wird sowohl mit Version 5 als auch mit Version 6 ausgeliefert. ComCtl32.dll Version 6 enthält sowohl die Benutzersteuerelemente als auch die allgemeinen Steuerelemente. Standardmäßig verwenden Anwendungen die in User32.dll definierten Benutzersteuerelemente und die in ComCtl32.dll Version 5 definierten allgemeinen Steuerelemente. Eine Liste der DLL-Versionen und deren Verteilungsplattformen finden Sie unter Allgemeine Steuerungsversionen.

Wenn Ihre Anwendung visuelle Stile verwenden soll, müssen Sie ein Anwendungsmanifest oder eine Compilerdirektive hinzufügen, die angibt, dass ComCtl32.dll Version 6 verwendet werden soll, wenn sie verfügbar ist.

Mit einem Anwendungsmanifest kann eine Anwendung angeben, welche Versionen einer Assembly erforderlich sind. In Microsoft Win32 ist eine Assembly eine Gruppe von DLLs und eine Liste von versionsfähigen Objekten, die in diesen DLLs enthalten sind.

Manifeste werden in XML geschrieben. Der Name der Anwendungsmanifestdatei ist der Name Ihrer ausführbaren Datei gefolgt von der Dateinamenerweiterung .manifest. Beispiel: MyApp.exe.manifest. Das folgende Beispielmanifest zeigt, dass der erste Abschnitt das Manifest selbst beschreibt. Die folgende Tabelle zeigt die attribute, die vom assemblyIdentity-Element im Abschnitt manifest description festgelegt wurden.

attribute BESCHREIBUNG
version Version des Manifests. Die Version muss die Form major.minor.revision.build haben (d. h. n.n.n.n, wobei n <=65535).
processorArchitecture Prozessor, für den Ihre Anwendung entwickelt wurde.
name Umfasst Den Firmennamen, den Produktnamen und den Anwendungsnamen.
type Typ Ihrer Anwendung, z. B. Win32.

 

Das Beispielmanifest enthält auch eine Beschreibung Ihrer Anwendung und gibt Anwendungsabhängigkeiten an. Die folgende Tabelle zeigt die Attribute, die vom assemblyIdentity-Element im Abschnitt abhängigkeit festgelegt wurden.

attribute BESCHREIBUNG
type Typ der Abhängigkeitskomponente, z. B. Win32.
name Der Name der Komponente.
version Version der Komponente.
processorArchitecture Prozessor, für den die Komponente entwickelt wurde.
publicKeyToken Schlüsseltoken, das mit dieser Komponente verwendet wird.
language Sprache der Komponente.

 

Es folgt ein Beispiel für eine Manifestdatei.

Wichtig

Legen Sie den Eintrag processorArchitecture auf "X86" fest, wenn Ihre Anwendung auf die 32-Bit-Windows-Plattform abzielt, oder auf "amd64" , wenn Ihre Anwendung auf die 64-Bit-Windows-Plattform abzielt. Sie können auch "*" angeben, um sicherzustellen, dass alle Plattformen zielorientiert sind, wie in den folgenden Beispielen gezeigt.

 

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

Wenn Sie Microsoft Visual C++ 2005 oder höher verwenden, können Sie dem Quellcode die folgende Compilerdirektive hinzufügen, anstatt ein Manifest manuell zu erstellen. Aus Gründen der Lesbarkeit ist die Direktive hier in mehrere Zeilen unterteilt.

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

In den folgenden Themen werden die Schritte zum Anwenden von visuellen Stilen auf verschiedene Arten von Anwendungen beschrieben. Beachten Sie, dass das Manifestformat in jedem Fall identisch ist.

Verwenden ComCtl32.dll Version 6 in einer Anwendung, die nur Standarderweiterungen verwendet

Im Folgenden sind Beispiele für Anwendungen aufgeführt, die keine Erweiterungen von Drittanbietern verwenden.

  • Rechner
  • FreeCell (in Windows Vista und Windows 7)
  • Minesweeper (in Windows Vista und Windows 7)
  • Notepad
  • Solitaire (in Windows Vista und Windows 7)

So erstellen Sie ein Manifest und ermöglichen Ihrer Anwendung die Verwendung visueller Stile.

  1. Verknüpfen Sie comCtl32.lib, und rufen Sie InitCommonControls auf.

  2. Fügen Sie ihrer Quellstruktur eine Datei namens YourApp.exe.manifest hinzu, die das XML-Manifestformat aufweist.

    <?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. Fügen Sie das Manifest wie folgt zur Ressourcendatei Ihrer Anwendung hinzu:

    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.exe.manifest"
    

    Hinweis

    Wenn Sie den vorherigen Eintrag zur Ressource hinzufügen, müssen Sie ihn in einer Zeile formatieren. Alternativ können Sie die XML-Manifestdatei im selben Verzeichnis wie die ausführbare Datei Ihrer Anwendung ablegen. Das Betriebssystem lädt zuerst das Manifest aus dem Dateisystem, und überprüfen Sie dann den Ressourcenabschnitt der ausführbaren Datei. Die Dateisystemversion hat Vorrang.

     

Wenn Sie Ihre Anwendung erstellen, wird das Manifest als binäre Ressource hinzugefügt.

Verwenden von ComCtl32 Version 6 in Systemsteuerung oder einer DLL, die von RunDll32.exe

So erstellen Sie ein Manifest und ermöglichen Ihrer Anwendung die Verwendung visueller Stile.

  1. Verknüpfen Sie comCtl32.lib, und rufen Sie InitCommonControls auf.

  2. Fügen Sie ihrer Quellstruktur eine Datei namens YourApp.cpl.manifest hinzu, die das XML-Manifestformat aufweist.

    <?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. Fügen Sie das Manifest der Ressourcendatei Ihrer Anwendung als Ressourcen-ID 123 hinzu.

Hinweis

Wenn Sie eine Systemsteuerung-Anwendung erstellen, platzieren Sie sie in der entsprechenden Kategorie. Systemsteuerung unterstützt jetzt die Kategorisierung von Systemsteuerung Anwendungen. Dies bedeutet, dass Systemsteuerung Anwendungen Bezeichner zugewiesen und in Aufgabenbereiche wie Programme, Darstellung und Designs oder Datums-, Uhrzeit-, Sprach- und Regionaloptionen unterteilt werden können.

 

Hinzufügen von Unterstützung für visuelle Stile zu einer Erweiterung, einem Plug-In, einem MMC-Snap-In oder einer DLL, die in einen Prozess eingebunden wird

Unterstützung für visuelle Stile kann einer Erweiterung, einem Plug-In, einem MMC-Snap-In oder einer DLL hinzugefügt werden, die in einen Prozess eingebunden wird. Führen Sie beispielsweise die folgenden Schritte aus, um unterstützung für visuelle Stile für ein MMC-Snap-In (Microsoft Management Console) hinzuzufügen.

  1. Kompilieren Sie Ihr Snap-In mit dem Flag -DISOLATION_AWARE_ENABLED, oder fügen Sie die folgende Anweisung vor der #include "windows.h"-Anweisung ein.

    #define ISOLATION_AWARE_ENABLED 1
    

    Weitere Informationen zu ISOLATION_AWARE_ENABLED finden Sie unter Isolieren von Komponenten.

  2. Fügen Sie die allgemeine Steuerelementheaderdatei in Ihre Snap-In-Quelle ein.

    #include <commctrl.h>
    
  3. Fügen Sie ihrer Quellstruktur eine Datei mit dem Namen YourApp.manifest hinzu, die das XML-Manifestformat verwendet.

    <?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. Fügen Sie das Manifest der Ressourcendatei Ihres Snap-Ins hinzu. Details zum Hinzufügen eines Manifests zu einer Ressourcendatei finden Sie unter Verwenden von ComCtl32 Version 6 in einer Anwendung, die Erweiterungen, Plug-Ins oder eine DLL verwendet, die in einen Prozess eingebunden wird .

Deaktivieren von visuellen Formatvorlagen

Sie können visuelle Stile für ein Steuerelement oder für alle Steuerelemente in einem Fenster deaktivieren, indem Sie die SetWindowTheme-Funktion wie folgt aufrufen:

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

Im vorherigen Beispiel ist hwnd das Handle des Fensters, in dem visuelle Stile deaktiviert werden sollen. Nach dem Aufruf wird das Steuerelement ohne visuelle Stile gerendert.

Verwenden visueller Stile mit HTML-Inhalt

Für HTML-Seiten, auf denen die CSS-Eigenschaften (Cascading Style Sheets) wie Hintergrund oder Rahmen geändert werden, sind keine visuellen Stile darauf angewendet. Sie zeigen das angegebene CSS-Attribut an. Wenn sie als Teil des Inhalts angegeben werden, gelten die meisten CSS-Eigenschaften für Elemente, für die visuelle Stile angewendet werden.

Standardmäßig werden visuelle Stile auf systeminterne HTML-Steuerelemente auf Seiten angewendet, die in Microsoft Internet Explorer 6 und höheren Versionen angezeigt werden. Um visuelle Stile für eine HTML-Seite zu deaktivieren, fügen Sie dem <head> Abschnitt ein META-Tag hinzu. Dieses Verfahren gilt auch für Inhalte, die als HTML-Anwendungen (HTAs) verpackt sind. Um visuelle Stile zu deaktivieren, muss das META-Tag wie folgt lauten:

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

Hinweis

Wenn die Browsereinstellung und die Tageinstellung nicht übereinstimmen, wendet die Seite keine visuellen Stile an. Wenn das META-Tag beispielsweise auf "no" festgelegt ist und der Browser so festgelegt ist, dass visuelle Stile aktiviert werden, werden visuelle Stile nicht auf die Seite angewendet. Wenn jedoch entweder das Browser- oder META-Tag auf "Ja" festgelegt ist und das andere Element nicht angegeben ist, werden visuelle Stile angewendet.

 

Visuelle Stile können das Layout Ihrer Inhalte ändern. Wenn Sie bestimmte Attribute für systeminterne HTML-Steuerelemente festlegen, z. B. die Breite einer Schaltfläche, stellen Sie möglicherweise fest, dass die Bezeichnung auf der Schaltfläche unter bestimmten visuellen Stilen nicht lesbar ist.

Sie müssen Ihre Inhalte gründlich mit visuellen Stilen testen, um festzustellen, ob sich das Anwenden visueller Stile negativ auf Ihren Inhalt und Ihr Layout auswirkt.

Wenn visuelle Stile nicht angewendet werden

Um das Anwenden visueller Stile auf ein Fenster der obersten Ebene zu vermeiden, weisen Sie dem Fenster einen Bereich ungleich NULL (SetWindowRgn) zu. Das System geht davon aus, dass ein Fenster mit einem Nicht-NULL-Bereich ein spezialisiertes Fenster ist, das keine visuellen Stile verwendet. Ein untergeordnetes Fenster, das einem Fenster der obersten Ebene zugeordnet ist, das nicht visuelle Stile zugeordnet ist, kann dennoch visuelle Stile anwenden, obwohl dies im übergeordneten Fenster nicht der Fall ist.

Wenn Sie die Verwendung visueller Stile für alle Fenster in Ihrer Anwendung deaktivieren möchten, rufen Sie SetThemeAppProperties auf, und übergeben Sie nicht das flag STAP_ALLOW_NONCLIENT. Wenn eine Anwendung SetThemeAppProperties nicht aufruft, sind die angenommenen Flagwerte STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS | STAP_ALLOW_WEBCONTENT. Die angenommenen Werte bewirken, dass für den Nichtclientbereich, die Steuerelemente und den Webinhalt ein visueller Stil angewendet wird.

Kompatibilität Ihrer Anwendung mit früheren Versionen von Windows

Ein Großteil der visuellen Stilarchitektur ist so konzipiert, dass es einfach ist, Ihr Produkt weiterhin auf früheren Versionen von Windows zu liefern, die das Ändern des Erscheinungsbilds von Steuerelementen nicht unterstützen. Beachten Sie beim Versand einer Anwendung für mehrere Betriebssysteme Folgendes:

  • In Windows-Versionen vor Windows 8 sind visuelle Stile deaktiviert, wenn hoher Kontrast aktiviert ist. Um hohen Kontrast zu unterstützen, muss eine Legacyanwendung, die visuelle Stile unterstützt, einen separaten Codepfad bereitstellen, um UI-Elemente mit hohem Kontrast ordnungsgemäß zu zeichnen. In Windows 8 ist hoher Kontrast Teil visueller Stile; Eine Windows 8-Anwendung (eine Anwendung, die die Windows 8-GUID in den Kompatibilitätsbereich ihres Anwendungsmanifests einschließt) muss jedoch weiterhin einen separaten Codepfad bereitstellen, um unter Windows 7 in hohem Kontrast ordnungsgemäß zu rendern.
  • Wenn Sie die Features in ComCtl32.dll Version 6 verwenden, z. B. die Kachelansicht oder das Linksteuerelement, müssen Sie den Fall behandeln, in dem diese Steuerelemente auf dem Computer Ihres Benutzers nicht verfügbar sind. ComCtl32.dll Version 6 ist nicht verteilbar.
  • Testen Sie Ihre Anwendung, um sicherzustellen, dass Sie sich nicht auf Features von ComCtl32.dll Version 6 verlassen, ohne zuerst nach der aktuellen Version zu suchen.
  • Verlinken Sie nicht zu UxTheme.lib.
  • Schreiben Sie Fehlerbehandlungscode für Instanzen, wenn visuelle Stile nicht wie erwartet funktionieren.
  • Die Installation des Anwendungsmanifests in früheren Versionen wirkt sich nicht auf das Rendern von Steuerelementen aus.

Visuelle Stile