Składnia
#include <windows.h>
BOOL EnumDisplayMonitors( HDC hdc, LPCRECT lprcClip, MONITORENUMPROC lpfnEnum, LPARAM dwData );
Argumenty
Zwracana wartość
Jeśli funkcja zakończy się normalnie, zwracana wartość jest niezerowa, inaczej 0.
Opis szczegółowy
Funkcja
EnumDisplayMonitors wylicza wyświetlacze monitorów, które mają wspólny obszar utworzony przez połączenie ograniczającego prostokąta z widocznym obszarem kontekstu urządzenia. W przeciwieństwie do funkcji
GetSystemMetrics funkcja
EnumDisplayMonitors bierze pod uwagę również niewidoczne pseudo-monitory związane ze sterownikami. Funkcja
EnumDisplayMonitors wywołuje określoną przez programistę funkcję zwrotną
MonitorEnumProc dla każdego monitora, który jest wyliczony.
Dodatkowe informacje
Możemy wywołać funkcję
EnumDisplayMonitors z dwóch powodów:
1. Chcemy zoptymalizować rysowanie na kontekście urządzenia obejmującym kilka wyświetlaczy monitorów, które mają różne schematy kolorów.
2. Chcemy uzyskać uchwyt i pozycję ograniczającego prostokąta z jednego lub kilku wyświetlaczy monitorów.
Aby ustalić, czy wszystkie wyświetlacze monitorów w systemie mają ten sam schemat kolorów, wywołaj funkcję
GetSystemMetrics z argumentem
SM_SAMEDISPLAYFORMAT. Nie musisz używać funkcji
EnumDisplayMonitors, gdy wyświetlacze monitorów mają różne schematy kolorów. Możesz kontynuować rysowanie przy założeniu, że cały ekran ma właściwości kolorów podstawowego monitora. Okna powinny wyglądać prawidłowo, ale funkcja
EnumDisplayMonitors może poprawić ich wygląd. Ustawienie argumentu
hdc na
NULL pozwala na użycie funkcji
EnumDisplayMonitors do uzyskania uchwytu i pozycji prostokąta dla jednego lub kilku monitorów. Poniższa tabela zawiera cztery przykłady, jak użycie argumentów
hdc i
lprcClip wpływa na zachowanie funkcji
EnumDisplayMonitors:
Przykłady
Aby wyświetlić okno na ekranie po otrzymaniu komunikatu
WM_PAINT, używając możliwości każdego monitora, można użyć poniższego kodu w procedurze okna:
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_PAINT:
{
hdc = BeginPaint( hwnd, & ps );
EnumDisplayMonitors(
hdc,
NULL,
MyPaintEnumProc,
0 );
EndPaint( hwnd, & ps );
}
}
}
Aby wyświetlić górną połowę tego okna używając możliwości każdego monitora, można użyć poniższego kodu (podobnie jak wyżej, w obsłudze komunikatu
WM_PAINT):
RECT rc;
GetClientRect( hwnd, & rc );
rc.bottom =( rc.bottom - rc.top ) / 2;
hdc = GetDC( hwnd );
EnumDisplayMonitors(
hdc,
& rc,
MyPaintEnumProc,
0 );
ReleaseDC( hwnd, hdc );
Aby optymalnie wyświetlić cały ekran wirtualny na każdym wyświetlaczu monitora, można użyć poniższego kodu:
hdc = GetDC( NULL );
EnumDisplayMonitors(
hdc,
NULL,
MyPaintScreenEnumProc,
0 );
ReleaseDC( NULL, hdc );
Aby uzyskać informacje o wszystkich wyświetlaczach monitorów, można użyć poniższego kodu:
EnumDisplayMonitors(
NULL,
NULL,
MyInfoEnumProc,
0 );
Wymagania
Zagadnienia powiązane
GetSystemMetrics | Pobiera określone wymiary lub ustawienia konfiguracyjne systemu. (funkcja) |
---|
Linki zewnętrzne