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.
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) |