EnumDisplayMonitors-Funktion (winuser.h)

Die Funktion EnumDisplayMonitors listet Anzeigemonitore auf (einschließlich unsichtbarer Pseudomonitore, die den Spiegelungstreibern zugeordnet sind), die einen Bereich überschneiden, der durch den Schnittpunkt eines angegebenen Clipping-Rechtecks und den sichtbaren Bereich eines Gerätekontexts gebildet wird. EnumDisplayMonitors ruft einmal für jeden aufgezählten Monitor eine anwendungsdefinierte MonitorEnumProc-Rückruffunktion auf. Beachten Sie, dass GetSystemMetrics (SM_CMONITORS) nur die Anzeigemonitore zählt.

Syntax

BOOL EnumDisplayMonitors(
  [in] HDC             hdc,
  [in] LPCRECT         lprcClip,
  [in] MONITORENUMPROC lpfnEnum,
  [in] LPARAM          dwData
);

Parameter

[in] hdc

Ein Handle für einen Anzeigegerätekontext, der den sichtbaren Bereich von Interesse definiert.

Wenn dieser Parameter NULL ist, ist der hdcMonitor-Parameter , der an die Rückruffunktion übergeben wird, NULL, und der sichtbare Bereich von Interesse ist der virtuelle Bildschirm, der alle Anzeigen auf dem Desktop umfasst.

[in] lprcClip

Ein Zeiger auf eine RECT-Struktur , die ein Abschneiderechteck angibt. Der bereich von Interesse ist die Schnittmenge des Abschneiderechtecks mit dem sichtbaren Bereich, der von hdc angegeben wird.

Wenn hdc nicht NULL ist, sind die Koordinaten des Abschneiderechtecks relativ zum Ursprung des hdc. Wenn hdcNULL ist, sind die Koordinaten virtuelle Bildschirmkoordinaten.

Dieser Parameter kann NULL sein, wenn Sie die von hdc angegebene Region nicht ausschneiden möchten.

[in] lpfnEnum

Ein Zeiger auf eine anwendungsdefinierte Rückruffunktion von MonitorEnumProc .

[in] dwData

Anwendungsdefinierte Daten, die EnumDisplayMonitors direkt an die MonitorEnumProc-Funktion übergibt.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null.

Hinweise

Es gibt zwei Gründe, die EnumDisplayMonitors-Funktion aufzurufen:

  • Sie möchten optimal in einen Gerätekontext zeichnen, der sich über mehrere Bildschirme erstreckt, und die Monitore haben unterschiedliche Farbformate.
  • Sie möchten ein Griff- und Positionsrechteck für einen oder mehrere Anzeigemonitore erhalten.
Rufen Sie GetSystemMetrics (SM_SAMEDISPLAYFORMAT) auf, um zu ermitteln, ob alle Anzeigemonitore in einem System das gleiche Farbformat aufweisen.

Sie müssen die EnumDisplayMonitors-Funktion nicht verwenden, wenn ein Fenster Bildschirme umfasst, die unterschiedliche Farbformate aufweisen. Sie können weiterhin malen, wenn sie davon ausgehen, dass der gesamte Bildschirm über die Farbeigenschaften des primären Monitors verfügt. Ihre Fenster sehen gut aus. Mit EnumDisplayMonitors können Sie sie einfach besser aussehen lassen.

Wenn Sie den hdc-Parameter auf NULL festlegen, können Sie die Funktion EnumDisplayMonitors verwenden, um ein Handle- und Positionsrechteck für einen oder mehrere Anzeigemonitore zu erhalten. Die folgende Tabelle zeigt, wie sich die vier Kombinationen von NULL - und non-NULL-Wertenvon hdc und lprcClip auf das Verhalten der EnumDisplayMonitors-Funktion auswirken.

Hdc lprcRect Verhalten von EnumDisplayMonitors
NULL NULL Listet alle Anzeigemonitore auf. Die Rückruffunktion empfängt einen NULL-HDC .
NULL ungleich NULL Listet alle Anzeigemonitore auf, die das Abschneiderechteck überschneiden. Verwenden Sie virtuelle Bildschirmkoordinaten für das Abschneiderechteck. Die Rückruffunktion empfängt einen NULL-HDC .
ungleich NULL NULL Listet alle Anzeigemonitore auf, die den sichtbaren Bereich des Gerätekontexts überschneiden. Die Rückruffunktion empfängt ein Handle für einen DC für den spezifischen Anzeigemonitor.
ungleich NULL ungleich NULL Listet alle Anzeigemonitore auf, die den sichtbaren Bereich des Gerätekontexts und das Abschneiderechteck überschneiden. Verwenden Sie Gerätekontextkoordinaten für das Abschneiderechteck. Die Rückruffunktion empfängt ein Handle für einen DC für den spezifischen Anzeigemonitor.
 

Beispiele

Um als Reaktion auf eine WM_PAINT Nachricht zu zeichnen, können Sie mithilfe der Funktionen der einzelnen Monitore Code wie diesen in einer Fensterprozedur verwenden:


case WM_PAINT:
  hdc = BeginPaint(hwnd, &ps);
  EnumDisplayMonitors(hdc, NULL, MyPaintEnumProc, 0);
  EndPaint(hwnd, &ps);

Um die obere Hälfte eines Fensters mit den Funktionen der einzelnen Monitore zu zeichnen, können Sie Code wie folgt verwenden:


GetClientRect(hwnd, &rc);
rc.bottom = (rc.bottom - rc.top) / 2;
hdc = GetDC(hwnd);
EnumDisplayMonitors(hdc, &rc, MyPaintEnumProc, 0);
ReleaseDC(hwnd, hdc);

Um den gesamten virtuellen Bildschirm optimal für jeden Anzeigemonitor zu zeichnen, können Sie Code wie folgt verwenden:


hdc = GetDC(NULL);
EnumDisplayMonitors(hdc, NULL, MyPaintScreenEnumProc, 0);
ReleaseDC(NULL, hdc);

Verwenden Sie code wie folgt, um Informationen zu allen Anzeigemonitoren abzurufen:


EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0);  

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winuser.h (einschließlich Windows.h)
Bibliothek User32.lib
DLL User32.dll
APIs ext-ms-win-ntuser-sysparams-ext-l1-1-1 (eingeführt in Windows 10, Version 10.0.14393)

Weitere Informationen

GetSystemMetrics

MonitorEnumProc

Funktionen für mehrere Anzeigemonitore

Übersicht über mehrere Bildschirme