- Artikel
- 06/30/2021
- 9 minuten zum Lesen
-
- j
- k
- T
- m
- m
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 Stile auf Anwendungen angewendet werden können
- Mit ComCtl32.dll Version 6 in einer Anwendung, die nur Standarderweiterungen verwendet
- Mit ComCtl32 Version 6 in der Systemsteuerung oder eine DLL, die von RunDll32 ausgeführt wird.exe
- 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
- Deaktivieren von visuellen Stilen
- Verwenden von visuellen Stilen mit HTML-Inhalt
- Wenn keine visuellen Stile angewendet werden
- Herstellen der Kompatibilität Ihrer Anwendung mit früheren Windows-Versionen
- Verwenden von Manifesten oder Direktiven, um sicherzustellen, dass visuelle Stile auf Anwendungen angewendet werden können
- Mit ComCtl32.dll Version 6 in einer Anwendung, die nur Standarderweiterungen verwendet
- Verwenden von ComCtl32 Version 6 in der Systemsteuerung oder einer DLL, die von RunDll32 ausgeführt wird.exe
- 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 eingefügt wird
- Deaktivieren von visuellen Stilen
- Verwenden von visuellen Stilen mit HTML-Inhalt
- Wenn keine visuellen Stile angewendet werden
- Machen Sie Ihre Anwendung kompatibel mit früheren Versionen von Windows
Verwenden von Manifesten oder Direktiven, um sicherzustellen, dass visuelle Stile auf Anwendungen angewendet werden können
Damit Ihre Anwendung visuelle Stile verwenden kann, müssen Sie ComCtl32 verwenden.dll Version 6 oder höher. Da Version 6 nicht weiterverteilbar 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 definierten Benutzersteuerelemente.dll und die in ComCtl32 definierten allgemeinen Steuerelemente.dll-Version 5. Eine Liste der DLL-Versionen und ihrer Verteilungsplattformen finden Sie unter Allgemeine Steuerelementversionen.
Wenn Ihre Anwendung visuelle Stile verwenden soll, müssen Sie ein Anwendungsmanifest oder eine Compiler-Direktive hinzufügen, die ComCtl32 angibt.dll Version 6 sollte verwendet werden, wenn es verfügbar ist.
Mit einem Anwendungsmanifest kann eine Anwendung angeben, welche Versionen einer Assembly erforderlich sind. In Microsoft Win32 besteht eine Assembly aus einer Reihe von DLLs und einer Liste versionierbarer Objekte, 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 .manifestieren; zum Beispiel MyApp.exe.manifestieren. Das folgende Beispielmanifest zeigt, dass der erste Abschnitt das Manifest selbst beschreibt. Die folgende Tabelle zeigt die Attribute, die vom assemblyIdentity-Element im Abschnitt Manifestbeschreibung festgelegt wurden.
Attribut | Beschreibung |
---|---|
version | Version des Manifests. Die Version muss in der Form major vorliegen.kleinere.Revision.build (d. h. n.n.n.n, wobei n <=65535). |
processorArchitecture | Prozessor, für den Ihre Anwendung entwickelt wurde. |
name | Enthält Firmennamen, Produktnamen und Anwendungsnamen. |
typ | 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.
Attribut | Beschreibung |
---|---|
typ | Typ der Abhängigkeitskomponente, z. B. Win32. |
name | Name der Komponente. |
version | Version der Komponente. |
processorArchitecture | Prozessor, für den die Komponente ausgelegt ist. |
PublicKeyToken | Schlüsseltoken, das mit dieser Komponente verwendet wird. |
sprache | Sprache der Komponente. |
Es folgt ein Beispiel für eine Manifestdatei.
Wichtig
Setzen Sie den Eintrag processorArchitecture auf „X86“, 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 angesprochen werden, 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 Ihrem Quellcode die folgende Compiler-Direktive hinzufügen, anstatt manuell ein Manifest zu erstellen. Zur besseren 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 Arten von Anwendungen beschrieben. Beachten Sie, dass das Manifestformat in jedem Fall gleich ist.
Mit ComCtl32.dll Version 6 in einer Anwendung, die nur Standarderweiterungen verwendet
Im Folgenden finden Sie Beispiele für Anwendungen, die keine Erweiterungen von Drittanbietern verwenden.
- Rechner
- FreeCell (in Windows Vista und Windows 7)
- Minesweeper (in Windows Vista und Windows 7)
- Notizblock
- Solitaire (in Windows Vista und Windows 7)
Um ein Manifest zu erstellen und Ihrer Anwendung die Verwendung visueller Stile zu ermöglichen.
-
Link zu ComCtl32.lib und rufen Sie InitCommonControls auf.
-
Fügen Sie eine Datei namens YourApp hinzu.exe.manifest zu Ihrem Quellbaum, der das XML-Manifestformat hat.
<?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>
-
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ü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 ausgeführt wird.exe
, um ein Manifest zu erstellen und Ihrer Anwendung die Verwendung visueller Stile zu ermöglichen.
-
Link zu ComCtl32.lib und rufen Sie InitCommonControls auf.
-
Fügen Sie eine Datei namens YourApp hinzu.cpl.manifest zu Ihrem Quellbaum, der das XML-Manifestformat hat.
<?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>
-
Fügen Sie das Manifest der Ressourcendatei Ihrer Anwendung als Ressourcen-ID 123 hinzu.
Hinweis
Wenn Sie eine Control Panel-Anwendung erstellen, ordnen Sie sie der entsprechenden Kategorie zu. Control Panel unterstützt jetzt die Kategorisierung von Control Panel-Anwendungen. Dies bedeutet, dass Systemsteuerungsanwendungen Bezeichner zugewiesen und in Aufgabenbereiche wie Hinzufügen oder Entfernen von Programmen, Erscheinungsbild und Designs oder Datum, Uhrzeit, Sprache und regionale Optionen 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 eingefügt wird
Unterstützung für visuelle Stile kann zu einer Erweiterung, einem Plug-In, einem MMC-Snap-In oder einer DLL hinzugefügt werden, die in einen Prozess eingefügt wird. Führen Sie beispielsweise die folgenden Schritte aus, um die Unterstützung für visuelle Stile für ein MMC-Snap-In (Microsoft Management Console) hinzuzufügen.
-
Kompilieren Sie Ihr Snap-In mit dem Flag -DISOLATION_AWARE_ENABLED oder fügen Sie die folgende Anweisung vor den Fenstern „#include“ ein.h“ Aussage.
#define ISOLATION_AWARE_ENABLED 1
Weitere Informationen zu ISOLATION_AWARE_ENABLED finden Sie unter Isolieren von Komponenten.
-
Fügen Sie die gemeinsame Steuerelement-Header-Datei in Ihre Snap-In-Quelle ein.
#include <commctrl.h>
-
Fügen Sie eine Datei namens YourApp hinzu.manifest zu Ihrem Quellbaum, der 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>
-
Fügen Sie das Manifest der Ressourcendatei Ihres Snap-Ins hinzu. Weitere Informationen 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 Stilen
Sie können visuelle Stile für ein Steuerelement oder für alle Steuerelemente in einem Fenster deaktivieren, indem Sie die Funktion SetWindowTheme 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 Stilen mit HTML-Inhalt
Auf HTML-Seiten, die die CSS-Eigenschaften (Cascading Style Sheets) wie Hintergrund oder Rahmen ändern, werden keine visuellen Stile angewendet. Sie zeigen das angegebene CSS-Attribut an. Wenn sie als Teil des Inhalts angegeben werden, gelten die meisten CSS-Eigenschaften für Elemente, auf die visuelle Stile angewendet werden.
Standardmäßig werden visuelle Stile auf intrinsische HTML-Steuerelemente auf Seiten angewendet, die in Microsoft Internet Explorer 6 und späteren Versionen angezeigt werden. Um visuelle Stile für eine HTML-Seite zu deaktivieren, fügen Sie dem Abschnitt
ein META-Tag hinzu. Diese Technik gilt auch für Inhalte, die als HTML-Anwendungen (HTA) 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, werden auf der Seite keine visuellen Stile angewendet. Wenn das META-Tag beispielsweise auf „Nein“ gesetzt ist und der Browser visuelle Stile aktiviert, werden visuelle Stile nicht auf die Seite angewendet. Wenn jedoch entweder der Browser oder das META-Tag auf „Ja“ gesetzt ist und das andere Element nicht angegeben ist, werden visuelle Stile angewendet.
Visuelle Stile können das Layout Ihres Inhalts ändern. Wenn Sie bestimmte Attribute für intrinsische HTML-Steuerelemente festlegen, z. B. die Breite einer Schaltfläche, können Sie außerdem feststellen, dass die Beschriftung 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 von visuellen Stilen nachteilig auf Ihre Inhalte und Ihr Layout auswirkt.
Wenn keine visuellen Stile angewendet werden
Um zu vermeiden, dass visuelle Stile auf ein Fenster der obersten Ebene angewendet werden, geben Sie dem Fenster einen Bereich ungleich Null (SetWindowRgn). Das System geht davon aus, dass ein Fenster mit einem Bereich ungleich NULL ein spezielles Fenster ist, das keine visuellen Stile verwendet. Ein untergeordnetes Fenster, das einem Fenster der obersten Ebene ohne visuelle Stile zugeordnet ist, kann weiterhin visuelle Stile anwenden, obwohl das übergeordnete Fenster dies nicht tut.
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 Flag-Werte STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS / STAP_ALLOW_WEBCONTENT. Die angenommenen Werte bewirken, dass für den Nicht-Client-Bereich, die Steuerelemente und den Webinhalt ein visueller Stil angewendet wird.
Machen Sie Ihre Anwendung kompatibel mit früheren Versionen von Windows
Ein Großteil der Visual Style-Architektur ist so konzipiert, dass es einfach ist, Ihr Produkt weiterhin auf früheren Versionen von Windows zu versenden, die das Ändern des Erscheinungsbilds von Steuerelementen nicht unterstützen. Beachten Sie beim Versand einer Anwendung für mehr als ein Betriebssystem Folgendes:
- In Windows-Versionen vor Windows 8 sind visuelle Stile deaktiviert, wenn hoher Kontrast aktiviert ist. Um hohen Kontrast zu unterstützen, muss eine Legacy-Anwendung, die visuelle Stile unterstützt, einen separaten Codepfad bereitstellen, um UI-Elemente in hohem Kontrast richtig zu zeichnen. In Windows 8 ist hoher Kontrast ein Teil visueller Stile; Eine Windows 8-Anwendung (eine Anwendung, die die Windows 8-GUID im Kompatibilitätsabschnitt ihres Anwendungsmanifests enthält) muss jedoch weiterhin einen separaten Codepfad bereitstellen, um unter Windows 7 und früher korrekt in hohem Kontrast zu rendern.
- Wenn Sie die Funktionen in ComCtl32 verwenden.in Version 6, z. B. der Kachelansicht oder dem Link-Steuerelement, müssen Sie den Fall behandeln, dass diese Steuerelemente auf dem Computer Ihres Benutzers nicht verfügbar sind. ComCtl32.dll Version 6 ist nicht weiterverteilbar.
- Testen Sie Ihre Anwendung, um sicherzustellen, dass Sie sich nicht auf die Funktionen von ComCtl32 verlassen.dll Version 6, ohne vorher nach der aktuellen Version zu suchen.
- Verlinken Sie nicht auf UXTheme.lib.
- Schreiben Sie Fehlerbehandlungscode für Fälle, in denen visuelle Stile nicht wie erwartet funktionieren.
- Die Installation des Manifests Ihrer Anwendung in früheren Versionen wirkt sich nicht auf das Rendern von Steuerelementen aus.
Visuelle Stile