Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Hasło nie zostało zweryfikowane
Niniejsze hasło zostało opracowane, jednak nie zostało ono zweryfikowane przez administrację serwisu. Jeżeli znalazłeś błędy merytoryczne w niniejszym dokumencie, prosimy o ich zgłoszenie na forum w dziale Znalezione błędy.
Opracował: jankowalski25
Biblioteki C/C++

EnumDisplayMonitors

[funkcja] 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.

Składnia

C/C++
#include <windows.h>

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

Argumenty

ArgumentOpis
hdcUchwyt do kontekstu urządzenia, który definiuje widoczny obszar monitora. Jeśli ma wartość NULL, argument przekazywany dp funkcji zwrotnej będzie miał również wartość NULL, a widoczny obszar będzie ekranem wirtualnym obejmującym wszystkie wyświetlacze na pulpicie.
lprcClipWskaźnik do struktury RECT, która określa obszar ograniczającego prostokąta połączony z widocznym obszarem określonym przez argument hdc. Jeśli argument hdc nie ma wartości NULL, współrzędne prostokąta odnoszą się do początku prostokąta wyznaczonego przez ten argument. Inaczej współrzędne odnoszą się do ekranu wirtualnego. Argument lprcClip może mieć wartość NULL, jeśli nie chcesz ograniczać obszaru określonego przez argument hdc.
lpfnEnumWskaźnik do funkcji zwrotnej MonitorEnumProc zdefiniowanej przez programistę.
dwDataZdefiniowane przez użytkownika dane przekazywane do funkcji zwrotnej MonitorEnumProc.

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 » WinAPIGetSystemMetrics 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ę » WinAPIGetSystemMetrics 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:
hdclprcRectzachowanie funkcji EnumDisplayMonitorsArgument hdc przyjmowany przez funkcję MonitorEnumProc
NULLNULLWylicza wszystkie wyświetlacze monitorów.NULL
NULLinna, niż NULLWylicza wszystkie wyświetlacze monitorów, które przecinają obszar prostokąta (współrzędne ekranu wirtualnego).NULL
inna, niż NULLNULLWylicza wszystkie wyświetlacze monitorów, które przecinają widoczny obszar prostokąta kontekstu urządzenia (zawarty w hdc).Uchwyt HDC dla określonego wyświetlacza monitora.
inna, niż NULLinna, niż NULLWylicza wszystkie wyświetlacze monitorów, które przecinają widoczny obszar kontekstu urządzenia oraz obszar ograniczającego prostokąta (współrzędne kontekstu urządzenia).Uchwyt HDC dla określonego wyświetlacza monitora.

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:
C/C++
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
    case WM_PAINT:
        {
            hdc = BeginPaint( hwnd, & ps );
            EnumDisplayMonitors(
            hdc, //uchwyt do kontekstu urządzenia
            NULL,
            MyPaintEnumProc, //procedura zdefiniowana przez programistę
            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):
C/C++
RECT rc;
GetClientRect( hwnd, & rc );
rc.bottom =( rc.bottom - rc.top ) / 2;
hdc = GetDC( hwnd );
EnumDisplayMonitors(
hdc, //uchwyt do kontekstu urządzenia
& rc, //adres struktury z wymiarami prostokąta
MyPaintEnumProc, //procedura zdefiniowana przez programistę
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:
C/C++
hdc = GetDC( NULL );
EnumDisplayMonitors(
hdc, //uchwyt do kontekstu urządzenia
NULL,
MyPaintScreenEnumProc, //procedura zdefiniowana przez programistę
0 );
ReleaseDC( NULL, hdc );
Aby uzyskać informacje o wszystkich wyświetlaczach monitorów, można użyć poniższego kodu:
C/C++
EnumDisplayMonitors(
NULL,
NULL,
MyInfoEnumProc, //procedura zdefiniowana przez programistę
0 );

Wymagania

Minimalny obsługiwany klientWindows 2000 Professional (tylko aplikacje biurowe)
Minimalny obsługiwany serwerWindows 2000 Server (tylko aplikacje biurowe)
NagłówekWinuser.h (wewnątrz Windows.h)
BibliotekaUser32.lib
DLLUser32.dll

Zagadnienia powiązane

GetSystemMetricsPobiera określone wymiary lub ustawienia konfiguracyjne systemu. (funkcja)

Linki zewnętrzne