Fonction EnumDisplayMonitors (winuser.h)

La fonction EnumDisplayMonitors énumère les moniteurs d’affichage (y compris les pseudo-moniteurs invisibles associés aux pilotes de mise en miroir) qui croisent une région formée par l’intersection d’un rectangle de découpage spécifié et la région visible d’un contexte d’appareil. EnumDisplayMonitors appelle une fonction de rappel MonitorEnumProc définie par l’application une fois pour chaque moniteur énuméré. Notez que GetSystemMetrics (SM_CMONITORS) compte uniquement les moniteurs d’affichage.

Syntaxe

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

Paramètres

[in] hdc

Handle d’un contexte d’appareil d’affichage qui définit la région visible d’intérêt.

Si ce paramètre a la valeur NULL, le paramètre hdcMonitor passé à la fonction de rappel est NULL, et la zone d’intérêt visible est l’écran virtuel qui englobe tous les affichages sur le bureau.

[in] lprcClip

Pointeur vers une structure RECT qui spécifie un rectangle de découpage. La région d’intérêt est l’intersection du rectangle de découpage avec la région visible spécifiée par hdc.

Si hdc n’a pas la valeur NULL, les coordonnées du rectangle de découpage sont relatives à l’origine du hdc. Si hdc a la valeur NULL, les coordonnées sont des coordonnées d’écran virtuel.

Ce paramètre peut avoir la valeur NULL si vous ne souhaitez pas couper la région spécifiée par hdc.

[in] lpfnEnum

Pointeur vers une fonction de rappel définie par l’application MonitorEnumProc .

[in] dwData

Données définies par l’application qu’EnumDisplayMonitors transmet directement à la fonction MonitorEnumProc .

Valeur retournée

Si la fonction réussit, la valeur de retour est différente de zéro.

Si la fonction échoue, la valeur de retour est égale à zéro.

Remarques

Il existe deux raisons d’appeler la fonction EnumDisplayMonitors :

  • Vous souhaitez dessiner de manière optimale dans un contexte d’appareil qui s’étend sur plusieurs moniteurs d’affichage, et les moniteurs ont différents formats de couleur.
  • Vous souhaitez obtenir un rectangle de handle et de position pour un ou plusieurs moniteurs d’affichage.
Pour déterminer si tous les moniteurs d’affichage d’un système partagent le même format de couleur, appelez GetSystemMetrics (SM_SAMEDISPLAYFORMAT).

Vous n’avez pas besoin d’utiliser la fonction EnumDisplayMonitors lorsqu’une fenêtre s’étend sur des moniteurs qui ont des formats de couleur différents. Vous pouvez continuer à peindre en supposant que l’écran entier possède les propriétés de couleur du moniteur principal. Vos fenêtres auront l’air bien. EnumDisplayMonitors vous permet simplement de les améliorer.

La définition du paramètre hdc sur NULL vous permet d’utiliser la fonction EnumDisplayMonitors pour obtenir un rectangle de handle et de position pour un ou plusieurs moniteurs d’affichage. Le tableau suivant montre comment les quatre combinaisons de valeurs NULL et non NULLhdc et lprcClip affectent le comportement de la fonction EnumDisplayMonitors .

Hdc lprcRect Comportement d’EnumDisplayMonitors
NULL NULL Énumère tous les moniteurs d’affichage. La fonction de rappel reçoit un HDC NULL .
NULL non NULL Énumère tous les moniteurs d’affichage qui entrecroisent le rectangle de découpage. Utilisez des coordonnées d’écran virtuel pour le rectangle de découpage. La fonction de rappel reçoit un HDC NULL .
non NULL NULL Énumère tous les moniteurs d’affichage qui croisent la région visible du contexte de l’appareil. La fonction de rappel reçoit un handle à un contrôleur de domaine pour le moniteur d’affichage spécifique.
non NULL non NULL Énumère tous les moniteurs d’affichage qui croisent la région visible du contexte de l’appareil et le rectangle de découpage. Utilisez les coordonnées de contexte de l’appareil pour le rectangle de découpage. La fonction de rappel reçoit un handle à un contrôleur de domaine pour le moniteur d’affichage spécifique.
 

Exemples

Pour peindre en réponse à un message WM_PAINT, à l’aide des fonctionnalités de chaque moniteur, vous pouvez utiliser du code comme suit dans une procédure de fenêtre :


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

Pour peindre la moitié supérieure d’une fenêtre à l’aide des fonctionnalités de chaque moniteur, vous pouvez utiliser du code comme suit :


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

Pour peindre l’ensemble de l’écran virtuel de manière optimale pour chaque moniteur d’affichage, vous pouvez utiliser du code comme suit :


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

Pour récupérer des informations sur tous les moniteurs d’affichage, utilisez le code suivant :


EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0);  

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête winuser.h (inclure Windows.h)
Bibliothèque User32.lib
DLL User32.dll
Ensemble d’API ext-ms-win-ntuser-sysparams-ext-l1-1-1 (introduit dans Windows 10, version 10.0.14393)

Voir aussi

GetSystemMetrics

MonitorEnumProc

Fonctions de plusieurs moniteurs d’affichage

Vue d’ensemble de plusieurs moniteurs d’affichage