EnumDisplayMonitors 関数 (winuser.h)

EnumDisplayMonitors 関数は、指定されたクリッピング四角形とデバイス コンテキストの可視領域の積集合によって形成された領域と交差する表示モニター (ミラーリング ドライバーに関連付けられた非表示の擬似モニターを含む) を列挙します。 EnumDisplayMonitors は、 列挙されるモニターごとに、アプリケーション定義 の MonitorEnumProc コールバック関数を 1 回呼び出します。 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 で指定された可視領域の交差部分です。

hdcNULL 以外の場合、クリッピング四角形の座標は hdc の原点に対して相対的になります。 hdcNULL の場合、座標は仮想画面座標です。

hdc で指定された領域をクリップしない場合、このパラメーターは NULL にすることができます。

[in] lpfnEnum

MonitorEnumProc アプリケーション定義コールバック関数へのポインター。

[in] dwData

EnumDisplayMonitorsMonitorEnumProc 関数に直接渡すアプリケーション定義データ。

戻り値

関数が成功すると、戻り値は 0 以外になります。

関数が失敗した場合は、0 を返します。

注釈

EnumDisplayMonitors 関数を呼び出すには、次の 2 つの理由があります。

  • 複数のディスプレイ モニターにまたがるデバイス コンテキストに最適に描画する必要があり、モニターの色形式は異なります。
  • 1 つ以上のディスプレイ モニターのハンドルと位置の四角形を取得する必要があります。
システム内のすべてのディスプレイ モニターが同じ色形式を共有しているかどうかを確認するには、 GetSystemMetrics (SM_SAMEDISPLAYFORMAT) を呼び出します。

ウィンドウが異なる色形式のディスプレイ モニターにまたがる場合は、 EnumDisplayMonitors 関数を使用する必要はありません。 画面全体にプライマリ モニターの色プロパティがあることを前提として、引き続き描画できます。 ウィンドウは正常に表示されます。 EnumDisplayMonitors を使用すると、見た目を良くすることができます。

hdc パラメーターを NULL に設定すると、EnumDisplayMonitors 関数を使用して、1 つ以上のディスプレイ モニターのハンドルと位置の四角形を取得できます。 次の表は、NULL 値と NULL以外のhdc 値と lprcClip 値の 4 つの組み合わせが 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 を含む)
Library User32.lib
[DLL] User32.dll
API セット ext-ms-win-ntuser-sysparams-ext-l1-1-1 (Windows 10 バージョン 10.0.14393 で導入)

こちらもご覧ください

GetSystemMetrics

MonitorEnumProc

複数ディスプレイモニター機能

複数ディスプレイ モニターの概要