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