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 函式的應用程式定義數據。

傳回值

如果函式成功,則傳回非零的值。

如果此函式失敗,則傳回值為零。

備註

呼叫 EnumDisplayMonitors 函式有兩個原因:

  • 您想要以最佳方式繪製到跨越數個顯示器監視器的裝置內容,而監視器有不同的色彩格式。
  • 您要取得一或多個顯示器監視器的控點和位置矩形。
若要判斷系統中的所有顯示器監視器是否共用相同的色彩格式,請呼叫 GetSystemMetrics (SM_SAMEDISPLAYFORMAT) 。

當視窗跨越具有不同色彩格式的顯示器監視器時,您不需要使用 EnumDisplayMonitors 函式。 您可以繼續在假設整個螢幕具有主要監視器的色彩屬性下繪製。 您的視窗看起來會正常。 EnumDisplayMonitors 只是讓您看起來更好。

將 hdc 參數設定為 NULL 可讓您使用 EnumDisplayMonitors 函式來取得一或多個顯示器監視器的句柄和位置矩形。 下表顯示 NULL 和非 NULLhdc 和非 NULL hdc 和 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 版中引進)

另請參閱

GetSystemMetrics

MonitorEnumProc

多個顯示監視器函式

多個顯示監視器概觀