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 的原點。 如果 hdcNULL,則座標為虛擬螢幕座標。

如果您不想裁剪 hdc 指定的區域,這個參數可以是 NULL

[in] lpfnEnum

MonitorEnumProc 應用程式定義回呼函式的指標。

[in] dwData

EnumDisplayMonitors 直接傳遞至 MonitorEnumProc 函式的應用程式定義數據。

傳回值

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

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

備註

呼叫 EnumDisplayMonitors 函式有兩個原因:

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

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

hdc 參數設定為 NULL 可讓您使用 EnumDisplayMonitors 函式來取得一或多個顯示器監視器的句柄和位置矩形。 下表顯示 NULL 和非 NULLhdc 和非 NULL hdclprcClip 值的四個組合如何影響 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

多個顯示監視器函式

多個顯示監視器概觀