EnumDisplayMonitors 함수(winuser.h)
EnumDisplayMonitors 함수는 지정된 클리핑 사각형의 교집합 및 디바이스 컨텍스트의 표시 영역에 의해 형성된 영역을 교차하는 디스플레이 모니터(미러링 드라이버와 연결된 보이지 않는 의사 모니터 포함)를 열거합니다. EnumDisplayMonitors 는 열거된 각 모니터에 대해 애플리케이션 정의 MonitorEnumProc 콜백 함수를 한 번 호출합니다. GetSystemMetrics(SM_CMONITORS)는 디스플레이 모니터만 계산합니다.
구문
BOOL EnumDisplayMonitors(
[in] HDC hdc,
[in] LPCRECT lprcClip,
[in] MONITORENUMPROC lpfnEnum,
[in] LPARAM dwData
);
매개 변수
[in] hdc
관심 있는 표시 영역을 정의하는 디스플레이 디바이스 컨텍스트에 대한 핸들입니다.
이 매개 변수가 NULL이면 콜백 함수에 전달된 hdcMonitor 매개 변수가 NULL이고, 관심 있는 영역은 바탕 화면의 모든 디스플레이를 포함하는 가상 화면입니다.
[in] lprcClip
클리핑 사각형을 지정하는 RECT 구조체에 대한 포인터입니다. 관심 영역은 hdc로 지정된 가시 영역과 클리핑 사각형의 교차점입니다.
hdc가 NULL이 아닌 경우 클리핑 사각형의 좌표는 hdc의 원점과 상대적입니다. hdc가 NULL인 경우 좌표는 가상 화면 좌표입니다.
hdc로 지정된 영역을 잘라내지 않으려면 이 매개 변수는 NULL일 수 있습니다.
[in] lpfnEnum
MonitorEnumProc 애플리케이션 정의 콜백 함수에 대한 포인터입니다.
[in] dwData
EnumDisplayMonitors가 MonitorEnumProc 함수에 직접 전달하는 애플리케이션 정의 데이터입니다.
반환 값
함수가 성공하면 반환 값이 0이 아닙니다.
함수가 실패하면 반환 값은 0입니다.
설명
EnumDisplayMonitors 함수를 호출하는 데는 두 가지 이유가 있습니다.
- 여러 디스플레이 모니터에 걸쳐 있고 모니터의 색 형식이 다른 디바이스 컨텍스트에 최적으로 그리려고 합니다.
- 하나 이상의 디스플레이 모니터에 대한 핸들 및 위치 사각형을 가져오려고 합니다.
창 범위가 다른 색 형식의 모니터를 표시하는 경우 EnumDisplayMonitors 함수를 사용할 필요가 없습니다. 전체 화면에 기본 모니터의 색 속성이 있다는 가정 하에 계속 그릴 수 있습니다. 창이 잘 보입니다. EnumDisplayMonitors 를 사용하면 더 잘 보이게 할 수 있습니다.
hdc 매개 변수를 NULL로 설정하면 EnumDisplayMonitors 함수를 사용하여 하나 이상의 디스플레이 모니터에 대한 핸들 및 위치 사각형을 가져올 수 있습니다. 다음 표에서는 NULL 및 비 NULLhdc 및 lprcClip 값의 네 가지 조합이 EnumDisplayMonitors 함수의 동작에 미치는 영향을 보여 줍니다.
Hdc | lprcRect | EnumDisplayMonitors 동작 |
---|---|---|
NULL | NULL | 모든 디스플레이 모니터를 열거합니다. 콜백 함수는 NULL HDC를 수신합니다. |
NULL | NULL이 아닌 경우 | 클리핑 사각형과 교차하는 모든 디스플레이 모니터를 열거합니다. 클리핑 사각형에 가상 화면 좌표를 사용합니다. 콜백 함수는 NULL HDC를 수신합니다. |
NULL이 아닌 경우 | NULL | 디바이스 컨텍스트의 표시되는 영역과 교차하는 모든 디스플레이 모니터를 열거합니다. 콜백 함수는 특정 디스플레이 모니터에 대한 DC에 대한 핸들을 받습니다. |
NULL이 아닌 경우 | NULL이 아닌 경우 | 디바이스 컨텍스트의 표시되는 영역과 클리핑 사각형을 교차하는 모든 디스플레이 모니터를 열거합니다. 클리핑 사각형에 디바이스 컨텍스트 좌표를 사용합니다. 콜백 함수는 특정 디스플레이 모니터에 대한 DC에 대한 핸들을 받습니다. |
예제
각 모니터의 기능을 사용하여 WM_PAINT 메시지에 대한 응답으로 그리려면 창 프로시저에서 다음과 같은 코드를 사용할 수 있습니다.
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
EnumDisplayMonitors(hdc, NULL, MyPaintEnumProc, 0);
EndPaint(hwnd, &ps);
각 모니터의 기능을 사용하여 창의 위쪽 절반을 그리려면 다음과 같은 코드를 사용할 수 있습니다.
GetClientRect(hwnd, &rc);
rc.bottom = (rc.bottom - rc.top) / 2;
hdc = GetDC(hwnd);
EnumDisplayMonitors(hdc, &rc, MyPaintEnumProc, 0);
ReleaseDC(hwnd, hdc);
각 디스플레이 모니터에 대해 전체 가상 화면을 최적으로 그리려면 다음과 같은 코드를 사용할 수 있습니다.
hdc = GetDC(NULL);
EnumDisplayMonitors(hdc, NULL, MyPaintScreenEnumProc, 0);
ReleaseDC(NULL, hdc);
모든 디스플레이 모니터에 대한 정보를 검색하려면 다음과 같은 코드를 사용합니다.
EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0);
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 | Windows 2000 Server[데스크톱 앱만] |
대상 플랫폼 | Windows |
헤더 | winuser.h(Windows.h 포함) |
라이브러리 | User32.lib |
DLL | User32.dll |
API 세트 | ext-ms-win-ntuser-sysparams-ext-l1-1-1(Windows 10 버전 10.0.14393에 도입됨) |