Freigeben über


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.

Dieses Thema enthält die folgenden Abschnitte.

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

Damit Ihre Anwendung visuelle Formatvorlagen verwenden kann, müssen Sie ComCtl32.dll Version 6 oder höher verwenden. Da Version 6 nicht weiterverteilt werden kann, ist sie nur verfügbar, wenn Ihre Anwendung auf einer Version von Windows 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 allgemeinen Steuerelemente, die in ComCtl32.dll Version 5 definiert sind. Eine Liste der DLL-Versionen und deren Verteilungsplattformen finden Sie unter Common Control Versions.

Wenn Ihre Anwendung visuelle Formatvorlagen verwenden soll, müssen Sie eine Anwendungsmanifest- oder 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 Reihe von DLLs und eine Liste mit versionsfähigen Objekten, die in diesen DLLs enthalten sind.

Manifeste werden in XML geschrieben. Der Name der Anwendungsmanifestdatei ist der Name der ausführbaren Datei gefolgt von der Dateinamenerweiterung .manifest; beispiel: MyApp.exe.manifest. Das folgende Beispielmanifest zeigt, dass der erste Abschnitt das Manifest selbst beschreibt. In der folgenden Tabelle sind die Attribute aufgeführt, die vom assemblyIdentity-Element im Abschnitt zur Manifestbeschreibung festgelegt werden.

Merkmal BESCHREIBUNG
Ausgabe Version des Manifests. Die Version muss sich in der Form "major.minor.revision.build" befinden (d. h. n.n.n.n, wobei n <=65535).
Prozessorarchitektur Prozessor, für den Ihre Anwendung entwickelt wird.
Name Umfasst Firmenname, Produktname und Anwendungsname.
Typ Typ Ihrer Anwendung, z. B. Win32.

 

Das Beispielmanifest enthält außerdem eine Beschreibung Ihrer Anwendung und gibt Anwendungsabhängigkeiten an. In der folgenden Tabelle sind die Attribute aufgeführt, die vom assemblyIdentity-Element im Abhängigkeitsabschnitt festgelegt werden.

Merkmal BESCHREIBUNG
Typ Typ der Abhängigkeitskomponente, z. B. Win32.
Name Name der Komponente.
Ausgabe Version der Komponente.
Prozessorarchitektur Prozessor, für den die Komponente entwickelt wurde.
publicKeyToken Schlüsseltoken, das mit dieser Komponente verwendet wird.
Sprache Sprache der Komponente.

 

Nachfolgend sehen Sie ein Beispiel für eine Manifestdatei.

Von Bedeutung

Legen Sie den ProzessorArchitecture-Eintrag auf "X86" fest, wenn Ihre Anwendung auf die 32-Bit-Windows-Plattform ausgerichtet ist, oder auf "amd64" , wenn Ihre Anwendung auf die 64-Bit-Windows-Plattform ausgerichtet ist. Sie können auch "*" angeben, wodurch sichergestellt wird, dass alle Plattformen gezielt 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 manuell ein Manifest zu erstellen. Zur 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 visueller Stile auf verschiedene Anwendungstypen beschrieben. Beachten Sie, dass das Manifestformat in jedem Fall identisch ist.

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

Im Folgenden sind Beispiele für Anwendungen aufgeführt, die keine Drittanbietererweiterungen verwenden.

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

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

  1. Link zu ComCtl32.lib und Aufrufen von InitCommonControls.

  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 platzieren. Das Betriebssystem lädt das Manifest zuerst aus dem Dateisystem und überprüft 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 der Systemsteuerung oder einer DLL, die von RunDll32.exe ausgeführt wird

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

  1. Link zu ComCtl32.lib und Aufrufen von InitCommonControls.

  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 zur Ressourcendatei Ihrer Anwendung als Ressourcen-ID 123 hinzu.

Hinweis

Wenn Sie eine Systemsteuerungsanwendung erstellen, platzieren Sie sie in der entsprechenden Kategorie. Die Systemsteuerung unterstützt jetzt die Kategorisierung von Systemsteuerungsanwendungen. Dies bedeutet, dass Systemsteuerungsanwendungen Bezeichner zugewiesen und in Aufgabenbereiche wie "Programme hinzufügen oder entfernen", "Darstellung" und "Designs" oder "Datum", "Uhrzeit", "Sprache" und "Regionale Optionen" unterteilt werden können.

 

Hinzufügen von Unterstützung für visuellen Stil zu einer Erweiterung, einem Plug-in, einem MMC-Snap-In oder einer DLL, die in einen Prozess eingebracht 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 eingebracht wird. Verwenden Sie beispielsweise die folgenden Schritte, um die Unterstützung für visuelle Stile in ein Snap-In der Microsoft Management Console (MMC) einzufügen.

  1. Kompilieren Sie das Snap-In mit dem -DISOLATION_AWARE_ENABLED Flag, 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 "Komponenten isolieren".

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

    #include <commctrl.h>
    
  3. Fügen Sie ihrer Quellstruktur eine Datei namens "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 zur Ressourcendatei Ihres Snap-Ins hinzu. Weitere Informationen zum Hinzufügen eines Manifests zu einer Ressourcendatei finden Sie in Verwendung von ComCtl32 Version 6 in einer Anwendung, die Erweiterungen, Plug-ins oder eine DLL enthält, welche in einen Prozess integriert wird.

Deaktivieren visueller Stile

Sie können visuelle Formatvorlagen 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 von visuellen Formatvorlagen mit HTML-Inhalt

HTML-Seiten, die die CSS-Eigenschaften (Cascading StyleSheets) ändern, z. B. Hintergrund oder Rahmen, weisen keine visuellen Formatvorlagen auf. Sie zeigen das angegebene CSS-Attribut an. Wenn sie als Teil des Inhalts angegeben wird, gelten die meisten CSS-Eigenschaften für Elemente, auf die visuelle Formatvorlagen angewendet wurden.

Standardmäßig werden visuelle Formatvorlagen auf systeminterne HTML-Steuerelemente auf Seiten angewendet, die in Microsoft Internet Explorer 6 und höheren Versionen angezeigt werden. Um visuelle Formatvorlagen für eine HTML-Seite zu deaktivieren, fügen Sie dem <head> Abschnitt ein META-Tag hinzu. Diese Technik 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 Tag-Einstellung nicht übereinstimmen, wendet die Seite keine visuellen Formatvorlagen an. Wenn beispielsweise das META-Tag auf "nein" festgelegt ist und der Browser so festgelegt ist, dass visuelle Formatvorlagen aktiviert werden, werden visuelle Formatvorlagen 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 Formatvorlagen angewendet.

 

Visuelle Formatvorlagen 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 Beschriftung auf der Schaltfläche unter bestimmten visuellen Formatvorlagen nicht lesbar ist.

Sie müssen Ihre Inhalte sorgfältig mit visuellen Formatvorlagen testen, um zu bestimmen, ob das Anwenden visueller Formatvorlagen nachteilig auf Ihre Inhalte und Ihr Layout wirkt.

Wenn visuelle Formatvorlagen nicht angewendet werden

Um das Anwenden visueller Formatvorlagen auf ein Fenster auf oberster 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 spezielles Fenster ist, das keine visuellen Formatvorlagen verwendet. Ein untergeordnetes Fenster, das einem Fenster auf oberster Ebene ohne visuelle Formatvorlagen zugeordnet ist, kann dennoch visuelle Formatvorlagen anwenden, auch wenn das übergeordnete Fenster dies nicht tut.

Wenn Sie die Verwendung visueller Formatvorlagen für alle Fenster in Ihrer Anwendung deaktivieren möchten, rufen Sie SetThemeAppProperties auf, und übergeben Sie das STAP_ALLOW_NONCLIENT Flag nicht. Wenn eine Anwendung SetThemeAppProperties nicht aufruft, werden die angenommenen Flagwerte STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS | STAP_ALLOW_WEBCONTENT. Die angenommenen Werte bewirken, dass auf den nicht klientenbezogenen Bereich, die Steuerelemente und den Webinhalt eine visuelle Formatvorlage angewendet wird.

So machen Sie Ihre Anwendung mit früheren Windows-Versionen kompatibel

Ein Großteil der architektur des visuellen Stils ist so konzipiert, dass es einfach ist, Ihr Produkt weiterhin in früheren Versionen von Windows zu versenden, die das Ändern der Darstellung 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 ältere Anwendung, die visuelle Formatvorlagen 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, die die Windows 8-GUID im Kompatibilitätsbereich des Anwendungsmanifests enthält) muss jedoch weiterhin einen separaten Codepfad bereitstellen, um in Windows 7 und einer früheren Version ordnungsgemäß zu rendern.
  • Wenn Sie die Features in ComCtl32.dll Version 6 verwenden, z. B. die Kachelansicht oder das Linksteuerelement, müssen Sie darauf vorbereitet sein, dass diese Bedienelemente auf dem Computer des Benutzers nicht vorhanden sind. ComCtl32.dll Version 6 ist nicht weiterverteilbar.
  • 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.
  • Nicht mit UxTheme.lib verlinken.
  • Schreiben Sie Fehlerbehandlungscode für Instanzen, wenn visuelle Formatvorlagen nicht wie erwartet funktionieren.
  • Die Installation des Anwendungsmanifests in früheren Versionen wirkt sich nicht auf das Rendern von Steuerelementen aus.

visuelle Formatvorlagen