Función EnumDisplayMonitors (winuser.h)

La función EnumDisplayMonitors enumera los monitores de visualización (incluidos los pseudo-monitores invisibles asociados a los controladores de creación de reflejo) que intersecan una región formada por la intersección de un rectángulo de recorte especificado y la región visible de un contexto de dispositivo. EnumDisplayMonitors llama a una función de devolución de llamada MonitorEnumProc definida por la aplicación una vez para cada monitor que se enumera. Tenga en cuenta que GetSystemMetrics (SM_CMONITORS) solo cuenta los monitores de visualización.

Sintaxis

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

Parámetros

[in] hdc

Identificador de un contexto de dispositivo de visualización que define la región visible de interés.

Si este parámetro es NULL, el parámetro hdcMonitor pasado a la función de devolución de llamada será NULL y la región visible de interés es la pantalla virtual que abarca todas las pantallas del escritorio.

[in] lprcClip

Puntero a una estructura RECT que especifica un rectángulo de recorte. La región de interés es la intersección del rectángulo de recorte con la región visible especificada por hdc.

Si hdc no es NULL, las coordenadas del rectángulo de recorte son relativas al origen del hdc. Si hdc es NULL, las coordenadas son coordenadas de pantalla virtual.

Este parámetro puede ser NULL si no desea recortar la región especificada por hdc.

[in] lpfnEnum

Puntero a una función de devolución de llamada definida por la aplicación MonitorEnumProc .

[in] dwData

Datos definidos por la aplicación que EnumDisplayMonitors pasan directamente a la función MonitorEnumProc .

Valor devuelto

Si la función se realiza correctamente, el valor devuelto es distinto de cero.

Si la función no se realiza correctamente, el valor devuelto es cero.

Comentarios

Hay dos razones para llamar a la función EnumDisplayMonitors :

  • Quiere dibujar de forma óptima en un contexto de dispositivo que abarque varios monitores de pantalla y los monitores tengan formatos de color diferentes.
  • Quiere obtener un rectángulo de posición y controlador para uno o varios monitores de pantalla.
Para determinar si todos los monitores de pantalla de un sistema comparten el mismo formato de color, llame a GetSystemMetrics (SM_SAMEDISPLAYFORMAT).

No es necesario usar la función EnumDisplayMonitors cuando una ventana abarca monitores de visualización que tienen formatos de color diferentes. Puede seguir pintando bajo la suposición de que toda la pantalla tiene las propiedades de color del monitor principal. Tus ventanas se verán bien. EnumDisplayMonitors solo te permite hacer que se vean mejor.

Establecer el parámetro hdc en NULL permite usar la función EnumDisplayMonitors para obtener un rectángulo de identificador y posición para uno o varios monitores de pantalla. En la tabla siguiente se muestra cómo las cuatro combinaciones de valores NULL y no NULLhdc y lprcClip afectan al comportamiento de la función EnumDisplayMonitors .

hdc lprcRect Comportamiento de EnumDisplayMonitors
NULL NULL Enumera todos los monitores de visualización. La función de devolución de llamada recibe un HDC NULL .
NULL distinto de NULL Enumera todos los monitores de visualización que cruzan el rectángulo de recorte. Use coordenadas de pantalla virtual para el rectángulo de recorte. La función de devolución de llamada recibe un HDC NULL .
distinto de NULL NULL Enumera todos los monitores de pantalla que cruzan la región visible del contexto del dispositivo. La función de devolución de llamada recibe un identificador de controlador de dominio para el monitor de visualización específico.
distinto de NULL distinto de NULL Enumera todos los monitores de visualización que cruzan la región visible del contexto del dispositivo y el rectángulo de recorte. Use coordenadas de contexto del dispositivo para el rectángulo de recorte. La función de devolución de llamada recibe un identificador de controlador de dominio para el monitor de visualización específico.
 

Ejemplos

Para pintar en respuesta a un mensaje de WM_PAINT, con las funcionalidades de cada monitor, puede usar código como este en un procedimiento de ventana:


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

Para pintar la mitad superior de una ventana con las funcionalidades de cada monitor, puede usar código similar al siguiente:


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

Para pintar la pantalla virtual completa de forma óptima para cada monitor de pantalla, puede usar código como este:


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

Para recuperar información sobre todos los monitores de pantalla, use código similar al siguiente:


EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0);  

Requisitos

   
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winuser.h (incluir Windows.h)
Library User32.lib
Archivo DLL User32.dll
Conjunto de API ext-ms-win-ntuser-sysparams-ext-l1-1-1 (introducido en Windows 10, versión 10.0.14393)

Consulte también

GetSystemMetrics

MonitorEnumProc

Funciones de varios monitores de presentación

Información general sobre varios monitores de visualización