描述
EnumDisplayMonitors功能枚举与指定剪切矩形和设备上下文的可见区域的交集形成的区域相交的显示监视器(包括与镜像驱动程序相关联的不可见伪监视器)。EnumDisplayMonitors为枚举的每个监视器调用一个应用程序定义的MonitorEnumProc回调函数。请注意,GetSystemMetrics(SM_CMONITORS)仅对显示器进行计数。
C++ 语法
BOOL EnumDisplayMonitors( __in HDC hdc, __in LPCRECT lprcClip, __in MONITORENUMPROC lpfnEnum, __in LPARAM dwData ); |
PowerBASIC 语法
FUNCTION EnumDisplayMonitors ( _ BYVAL hdc AS DWORD, _ BYREF lprcClip AS RECT, _ BYVAL lpfnEnum AS DWORD, _ BYVAL dwData AS DWORD _ ) AS LONG |
参数
hdc
[in]处理定义感兴趣可见区域的显示设备上下文。
如果此参数为NULL,则传递给回调函数的hdcMonitor参数将为NULL,并且感兴趣的可见区域是包含桌面上所有显示的虚拟屏幕。
lprcClip
[in]指向RECT结构的指针,指定剪切矩形。感兴趣的区域是剪切矩形与hDC指定的可见区域的交集。
如果hDC为非空值,则剪切矩形的坐标相对于hDC的原点。如果hDC为NULL,则坐标为虚拟屏幕坐标。
如果您不想剪切由hDC指定的区域,则此参数可以为NULL。
lpfnEnum
[in]指向MonitorEnumProc应用程序定义的回调函数的指针。
dwData
[in]EnumDisplayMonitors直接传递到MonitorEnumProc函数的应用程序定义数据。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。
备注
调用EnumDisplayMonitors功能有两个原因:
· | 您想要最佳地绘制到跨越多个显示器的设备上下文,并且显示器具有不同的颜色格式。 |
· | 您要获取一个或多个显示器的句柄和位置矩形。 |
要确定系统中的所有显示器是否共享相同的颜色格式,请调用GetSystemMetrics(SM_SAMEDISPLAYFORMAT)。
当窗口跨越具有不同颜色格式的显示监视器时,不需要使用EnumDisplayMonitors功能。假设整个屏幕具有主显示器的颜色属性,您可以继续绘制。你的窗户看起来不错EnumDisplayMonitors只是让你让他们看起来更好。
将hDC参数设置为NULL可以使用EnumDisplayMonitors函数获取一个或多个显示监视器的句柄和位置矩形。下表显示了NULL和非NULL hDC和lprcClip值的四个组合如何影响EnumDisplayMonitors函数的行为。
hdc |
lpcRect |
EnumDisplayMonitors行为 |
NULL |
NULL |
枚举所有显示器。 回调函数接收NULL HDC。 |
NULL |
non-NULL |
枚举与裁剪矩形相交的所有显示监视器。为剪切矩形使用虚拟屏幕坐标。 回调函数接收NULL HDC。 |
non-NULL |
NULL |
枚举与设备上下文的可见区域相交的所有显示监视器。 回调函数接收特定显示监视器的DC的句柄。 |
non-NULL |
non-NULL |
枚举与设备上下文的可见区域和剪切矩形相交的所有显示监视器。使用剪切矩形的设备上下文坐标。 回调函数接收特定显示监视器的DC的句柄。 |
例子
为了响应WM_PAINT消息来绘制,使用每个显示器的功能,您可以在窗口过程中使用这样的代码:
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
EnumDisplayMonitors(hdc, NULL, MyPaintEnumProc, 0);
EndPaint(hwnd, &ps);
CASE %WM_PAINT
hdc = BeginPaint(hwnd, ps)
EnumDisplayMonitors(hdc, BYVAL %NULL, CODEPTR(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);
GetClientRect(hwnd, rc)
rc.nBottom = (rc.nBottom - rc.nTop) \ 2
hdc = GetDC(hwnd)
EnumDisplayMonitors(hdc, rc, CODEPTR(MyPaintEnumProc), 0)
ReleaseDC(hwnd, hdc)
要为每个显示监视器最佳地绘制整个虚拟屏幕,可以使用如下代码:
hdc = GetDC(NULL);
EnumDisplayMonitors(hdc, NULL, MyPaintScreenEnumProc, 0);
ReleaseDC(NULL, hdc);
hdc = GetDC(NULL)
EnumDisplayMonitors(hdc, BYVAL %NULL, CODEPTR(MyPaintScreenEnumProc), 0)
ReleaseDC(NULL, hdc)
要检索有关所有显示监视器的信息,请使用如下代码:
EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0);
EnumDisplayMonitors(%NULL, BYVAL %NULL, CODEPTR(MyInfoEnumProc), 0);
引用文件 #INCLUDE Once
WinUser.inc(包括Windows.inc)