Skalieren des Desktopimages
Dieses Thema gilt nur für Windows 7 und höher sowie Windows Server 2008 R2 und höhere Versionen des Windows-Betriebssystems.
Funktionsweise der Skalierung
Ein Aufrufer kann die Funktion SetDisplayConfig Connecting and Configuring Displays (CCD) verwenden, um das Desktopbild auf den Monitor zu skalieren:
Wenn Desktop und Monitor dieselbe Auflösung verwenden, ist SetDisplayConfig nicht erforderlich, um das Desktopimage auf den Monitor zu skalieren. Dieser SetDisplayConfig-Vorgang wird als Identitätsskalierung bezeichnet.
Wenn sich die Desktop- und Monitorauflösung unterscheiden, wendet SetDisplayConfig eine der folgenden Skalierungstypen an. Die Monitorauflösung wird durch die DISPLAYCONFIG_TARGET_MODE-Struktur definiert.
Zentrierte Skalierung
Die zentrierte Skalierung ist ein Modus, in dem der Desktop auf dem Monitor ohne Skalierung angezeigt wird. Wenn SetDisplayConfig die zentrierte Skalierung anwendet, sind über und unter dem Desktop möglicherweise schwarze Bänder sichtbar. Die folgende Abbildung zeigt die zentrierte Skalierung.
Gestreckte Skalierung
Die gestreckte Skalierung ist ein Modus, in dem der Desktop horizontal und vertikal auf dem Monitor gestreckt wird, um sicherzustellen, dass die gesamte Anzeige verwendet wird. Wenn SetDisplayConfig die gestreckte Skalierung anwendet, sind keine schwarzen Bänder über und unter dem Desktop sichtbar. Der Desktop kann jedoch verzerrt erscheinen. Die folgende Abbildung zeigt die gestreckte Skalierung.
Seitenverhältnis erhaltend gestreckt
Die gestreckte Skalierung im Seitenverhältnis ist ein Modus, in dem der Desktop so weit wie möglich horizontal und vertikal gestreckt wird, während das Seitenverhältnis beibehalten wird. Wenn SetDisplayConfig gestreckte Skalierung im Seitenverhältnis verwendet, können schwarze Bänder entweder oberhalb und unterhalb oder links und rechts des Desktops sichtbar sein. Schwarze Bänder können jedoch nicht sowohl oberhalb als auch unterhalb und links und rechts des Desktops sichtbar sein. Da von Benutzern erwartet wird, dass sie diese Art der Skalierung bevorzugen, wendet SetDisplayConfig diese Art der Skalierung als Standard an. Die folgende Abbildung zeigt die gestreckte Skalierung im Seitenverhältnis.
Die Skalierung hängt von den Quell- und Zielmodi ab, die für einen Pfad verwendet werden. Darüber hinaus kann der Aufrufer SetDisplayConfig aufrufen, ohne die Zielmodusinformationen anzugeben (das heißt, das Festlegen des modeInfoArray-Parameters ist optional und kann auf NULL festgelegt werden). Dies bedeutet, dass der Aufrufer in der Regel nicht vorhersagen kann, ob SetDisplayConfig eine Skalierung durchführen muss. Darüber hinaus ist keine API vorhanden, um die vollständige Liste der Skalierungstypen abzurufen, die der Grafikkarte unterstützt. Die EnumDisplaySettings Win32-Funktion gibt DMDFO_DEFAULT im dmDisplayFixedOutput-Member der DEVMODE-Struktur zurück, auf den der lpDevMode-Parameter verweist, wenn der Aufrufer die Windows 7-Skalierungstypen anfordert.
Die Skalierung, die ein Aufrufer an SetDisplayConfig übergibt, ist eine Skalierungsabsicht und keine explizite Anforderung zum Ausführen eines Skalierungsvorgangs. Wenn eine Skalierung erforderlich ist (z. B. unterscheiden sich die Quell- und Zielauflösungen), verwendet SetDisplayConfig die Skalierung, die der Aufrufer bereitstellt. Wenn die angegebene Skalierung nicht unterstützt wird, verwendet SetDisplayConfig die Standardskalierung des Grafikkarten. Wenn die Quell- und Zielauflösungen, die der Aufrufer an SetDisplayConfig übergibt, identisch sind, legt SetDisplayConfig immer die Identitätsskalierung fest.
Skalierungsanforderungen
Die folgende Tabelle zeigt die verschiedenen SetDisplayConfig-Skalierungsanforderungen und identifiziert die abgekürzte Nomenklatur, die in den Tabellen in den folgenden Unterabschnitten verwendet wird. Definitionen der DISPLAYCONFIG_SCALING_XXX-Werte finden Sie unter DISPLAYCONFIG_SCALING.
Skalierungsanforderung | Abgekürzte Nomenklatur, die in den folgenden Tabellen verwendet wird |
---|---|
DISPLAYCONFIG_SCALING_IDENTITY | DC_IDENTITY |
DISPLAYCONFIG_SCALING_CENTERED | DC_CENTERED |
DISPLAYCONFIG_SCALING_STRETCHED | DC_STRETCHED |
DISPLAYCONFIG_SCALING_ASPECTRATIOCENTEREDMAX | DC_ASPECTRATIOCENTEREDMAX |
DISPLAYCONFIG_SCALING_CUSTOM | DC_CUSTOM |
DISPLAYCONFIG_SCALING_PREFERRED | DC_PREFERRED |
Der Standardskalierungswert des Adapters. Derzeit ist die Standardeinstellung auf Tablet-Systemen gestreckt. Auf Nicht-Tablet-Systemen mit Grafikkarten, die das Windows Display Driver Model (WDDM) unterstützen, wird der Standardwert vom Treiber definiert. Auf Nicht-Tablet-Systemen mit Grafikkarten, die WDDM mit neuen Features für Windows 7 unterstützen, ist die Standardeinstellung DC_ASPECTRATIOCENTEREDMAX. | AdapterDefault |
Der Skalierungswert aus der Datenbank für die aktuell verbundenen Monitore | DatabaseValue |
SetDisplayConfig-Skalierungsanforderungen
Die folgende Tabelle zeigt die Werte, die in der Datenbank gespeichert werden, und die Werte, die tatsächlich festgelegt werden, wobei:
- "Set (same)" und "Store (same)" sind die Set- und Speicherwerte, wenn der resultierende Quellmodus und der Zielmodus die gleiche Auflösung aufweisen.
- "Set (different)" und "Store (different)" sind die Set- und Speicherwerte, wenn der resultierende Quellmodus und der Zielmodus unterschiedliche Auflösungen aufweisen.
An SetDisplayConfig übergebenes Skalierungsflag | Set (gleich) | Store (identisch) | Set (anders) | Set (anders) |
---|---|---|---|---|
DC_IDENTITY aktuelle Konfiguration nicht in Der Datenbank | DC_IDENTITY | AdapterDefault | AdapterDefault | AdapterDefault |
DC_IDENTITY aktuelle Konfiguration in Db | DC_IDENTITY | DatabaseValue | DatabaseValue | DatabaseValue |
DC_CENTERED | DC_IDENTITY | DC_CENTERED | DC_CENTERED | DC_CENTERED |
DC_STRETCHED | DC_IDENTITY | DC_STRETCHED | DC_STRETCHED | DC_STRETCHED |
DC_ASPECTRATIOCENTEREDMAX auf WDDM mit Windows 7-Featuretreiber | DC_IDENTITY | DC_ASPRATIOMAX | DC_ASPRATIOMAX | DC_ASPRATIOMAX |
DC_ASPECTRATIOCENTEREDMAX auf dem WDDM-Treiber | DC_IDENTITY | AdapterDefault | AdapterDefault | AdapterDefault |
DC_CUSTOM auf WDDM mit Windows 7-Featurestreiber, der die benutzerdefinierte Skalierung im Pfad unterstützt | DC_CUSTOM | DC_CUSTOM | DC_CUSTOM | DC_CUSTOM |
DC_CUSTOM in WDDM mit Windows 7-Featuretreiber, der keine benutzerdefinierte Skalierung im Pfad unterstützt | DC_IDENTITY | AdapterDefault | AdapterDefault | AdapterDefault |
DC_CUSTOM auf dem WDDM-Treiber | DC_IDENTITY | AdapterDefault | AdapterDefault | AdapterDefault |
DC_PREFERRED aktuelle Konfiguration nicht in der Datenbank | DC_IDENTITY | AdapterDefault | AdapterDefault | AdapterDefault |
DC_PREFERRED aktuelle Konfiguration in Db | DC_IDENTITY | DatabaseValue | DatabaseValue | DatabaseValue |
Legacy ChangeDisplaySettingsEx-Skalierungsanforderungen
Die folgende Tabelle zeigt, wie die Skalierung, die ein Aufrufer an die Legacy-ChangeDisplaySettingsEx-API übergeben kann, dem Skalierungssatz zugeordnet wird, wobei:
- "Set (same)" und "Store (same)" sind die Set- und Speicherwerte, wenn der resultierende Quellmodus und der Zielmodus die gleiche Auflösung aufweisen.
- "Set (different)" und "Store (different)" sind die Set- und Speicherwerte, wenn der resultierende Quellmodus und der Zielmodus unterschiedliche Auflösungen aufweisen.
Skalierungsflagge, das an ChangeDisplaySettingsEx übergeben wurde | Set (gleich) | Store (identisch) | Set (anders) | Set (anders) |
---|---|---|---|---|
DMDFO_DEFAULT mit der aktuellen Konfiguration nicht in der CCD-Datenbank | DC_IDENTITY | AdapterDefault | AdapterDefault | AdapterDefault |
DMDFO_DEFAULT mit der aktuellen Konfiguration in der CCD-Datenbank | DC_IDENTITY | DatabaseValue | DatabaseValue | DatabaseValue |
DMDFO_STRETCH | DC_IDENTITY | DC_STRETCHED | DC_STRETCHED | DC_STRETCHED |
DMDFO_CENTER | DC_IDENTITY | DC_CENTERED | DC_CENTERED | DC_CENTERED |
DM_DISPLAYFIXEDOUTPUT nicht festgelegt, aktuelle Konfiguration nicht in der CCD-Datenbank | DC_IDENTITY | AdapterDefault | AdapterDefault | AdapterDefault |
DM_DISPLAYFIXEDOUTPUT nicht festgelegt, aktuelle Konfiguration in der CCD-Datenbank | DC_IDENTITY | DatabaseValue | DatabaseValue | DatabaseValue |
Skalierungsübersetzung von Legacy EnumDisplaySettings
Die folgende Tabelle zeigt, wie die Skalierung der Anzeigekonfiguration übersetzt und von EnumDisplaySettings zurückgegeben wird.
Aktuelle aktive Skalierung | GDI-Skalierungswerte, die von legacy EnumDisplaySettings(ENUM_CURRENT_SETTINGS) zurückgegeben wurden |
---|---|
DC_IDENTITY | DMDFO_DEFAULT |
DC_CENTERED | DMDFO_CENTER |
DC_STRETCHED | DMDFO_STRETCH |
DC_ASPRATIOMAX | DMDFO_DEFAULT |
DC_CUSTOM | DMDFO_DEFAULT |
DC_PREFERRED | DMDFO_DEFAULT |
DirectX-Spiele und -Skalierung
Microsoft DirectX 9L und frühere Runtimes erfordern, dass Anwendungen immer die ChangeDisplaySettingsEx-Funktion aufrufen, ohne DM_DISPLAYFIXEDOUTPUT im dmFields-Member der DEVMODE-Struktur festgelegt ist, auf die der lpDevMode-Parameter verweist. Mit DirectX 10 und höher können Anwendungen die Skalierung auswählen, die diese Anwendungen an ChangeDisplaySettingsEx übergeben. Die folgende Tabelle zeigt die Zuordnung von Skalierungswerten zu Skalierungsflags, die an ChangeDisplaySettingsEx übergeben werden.
DXGI-Wert für die Flip chain-Skalierung | Skalierungsflags, die an ChangeDisplaySettingsEx übergeben werden |
---|---|
DXGI_MODE_SCALING_UNSPECIFIED | DMDFO_DEFAULT, DMDFO_CENTER oder DMDFO_STRETCH. Die Skalierung, die Anwendungen verwenden, hängt von mehreren Faktoren ab, darunter die aktuelle Desktopskalierung und die Vom Treiber verfügbar gemachte Modusliste. |
DXGI_MODE_SCALING_CENTERED | DMDFO_CENTER |
DXGI_MODE_SCALING_STRETCHED | DMDFO_STRETCH |
Mithilfe dieser Informationen in Kombination mit den vorherigen Skalierungstabellen können Sie die erwartete Skalierung einer DirectX-Anwendung ermitteln.