Funzione EnumDisplayMonitors (winuser.h)

La funzione EnumDisplayMonitors enumera i monitoraggi di visualizzazione (inclusi gli pseudo-monitor invisibili associati ai driver di mirroring) che intersecano un'area formata dall'intersezione di un rettangolo di ritaglio specificato e dall'area visibile di un contesto di dispositivo. EnumDisplayMonitors chiama una funzione di callback MonitorEnumProc definita dall'applicazione una volta per ogni monitoraggio enumerato. Si noti che GetSystemMetrics (SM_CMONITORS) conta solo i monitor di visualizzazione.

Sintassi

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

Parametri

[in] hdc

Handle per un contesto di dispositivo di visualizzazione che definisce l'area visibile di interesse.

Se questo parametro è NULL, il parametro hdcMonitor passato alla funzione di callback sarà NULL e l'area visibile di interesse è la schermata virtuale che include tutti gli schermi sul desktop.

[in] lprcClip

Puntatore a una struttura RECT che specifica un rettangolo di ritaglio. L'area di interesse è l'intersezione del rettangolo di ritaglio con l'area visibile specificata da hdc.

Se hdc è diverso da NULL, le coordinate del rettangolo di ritaglio sono relative all'origine del hdc. Se hdc è NULL, le coordinate sono coordinate dello schermo virtuale.

Questo parametro può essere NULL se non si vuole ritagliare l'area specificata da hdc.

[in] lpfnEnum

Puntatore a una funzione di callback definita dall'applicazione MonitorEnumProc .

[in] dwData

Dati definiti dall'applicazione che EnumDisplayMonitors passa direttamente alla funzione MonitorEnumProc .

Valore restituito

Se la funzione ha esito positivo, il valore restituito è diverso da zero.

Se la funzione ha esito negativo, il valore restituito è zero.

Commenti

Esistono due motivi per chiamare la funzione EnumDisplayMonitors :

  • Si vuole disegnare in modo ottimale in un contesto di dispositivo che si estende su diversi monitor di visualizzazione e i monitor hanno formati di colore diversi.
  • Si desidera ottenere un handle e un rettangolo di posizione per uno o più monitor di visualizzazione.
Per determinare se tutti i monitoraggi dello schermo in un sistema condividono lo stesso formato di colore, chiamare GetSystemMetrics (SM_SAMEDISPLAYFORMAT).

Non è necessario usare la funzione EnumDisplayMonitors quando una finestra si estende su monitor con formati di colore diversi. È possibile continuare a disegnare presupponendo che l'intero schermo abbia le proprietà di colore del monitor primario. Le finestre appariranno bene. EnumDisplayMonitors ti permette di migliorarne l'aspetto.

L'impostazione del parametro hdc su NULL consente di usare la funzione EnumDisplayMonitors per ottenere un handle e un rettangolo di posizione per uno o più monitor di visualizzazione. Nella tabella seguente viene illustrato come le quattro combinazioni di valori HDC e hdc e lprcClip non NULL influiscono sul comportamento della funzione EnumDisplayMonitors.

Hdc lprcRect Comportamento di EnumDisplayMonitors
NULL NULL Enumera tutti i monitoraggi di visualizzazione. La funzione di callback riceve un HDC NULL .
NULL non NULL Enumera tutti i monitoraggi di visualizzazione che intersecano il rettangolo di ritaglio. Usare le coordinate dello schermo virtuale per il rettangolo di ritaglio. La funzione di callback riceve un HDC NULL .
non NULL NULL Enumera tutti i monitoraggi di visualizzazione che intersecano l'area visibile del contesto di dispositivo. La funzione di callback riceve un handle per un controller di dominio per il monitor di visualizzazione specifico.
non NULL non NULL Enumera tutti i monitoraggi di visualizzazione che intersecano l'area visibile del contesto di dispositivo e il rettangolo di ritaglio. Usare le coordinate del contesto di dispositivo per il rettangolo di ritaglio. La funzione di callback riceve un handle per un controller di dominio per il monitor di visualizzazione specifico.
 

Esempio

Per disegnare in risposta a un messaggio di WM_PAINT, usando le funzionalità di ogni monitoraggio, è possibile usare codice simile al seguente in una procedura della finestra:


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

Per disegnare la metà superiore di una finestra usando le funzionalità di ogni monitor, è possibile usare codice simile al seguente:


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

Per disegnare l'intero schermo virtuale in modo ottimale per ogni monitor di visualizzazione, è possibile usare codice simile al seguente:


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

Per recuperare informazioni su tutti i monitoraggi dello schermo, usare codice simile al seguente:


EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0);  

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winuser.h (include Windows.h)
Libreria User32.lib
DLL User32.dll
Set di API ext-ms-win-ntuser-sysparams-ext-l1-1-1 (introdotto in Windows 10, versione 10.0.14393)

Vedi anche

GetSystemMetrics

MonitorEnumProc

Funzioni monitor multiple

Panoramica dei monitoraggi multipli