Fungsi EnumDisplayMonitors (winuser.h)

Fungsi EnumDisplayMonitors menghitung monitor tampilan (termasuk pseudo-monitor tak terlihat yang terkait dengan driver pencerminan) yang berpotongan wilayah yang dibentuk oleh persimpangan persegi panjang kliping tertentu dan wilayah konteks perangkat yang terlihat. EnumDisplayMonitors memanggil fungsi panggilan balik MonitorEnumProc yang ditentukan aplikasi sekali untuk setiap monitor yang dijumlahkan. Perhatikan bahwa GetSystemMetrics (SM_CMONITORS) hanya menghitung monitor tampilan.

Sintaks

BOOL EnumDisplayMonitors(
  [in] HDC             hdc,
  [in] LPCRECT         lprcClip,
  [in] MONITORENUMPROC lpfnEnum,
  [in] LPARAM          dwData
);

Parameter

[in] hdc

Handel ke konteks perangkat tampilan yang menentukan wilayah minat yang terlihat.

Jika parameter ini NULL, parameter hdcMonitor yang diteruskan ke fungsi panggilan balik akan null, dan wilayah yang terlihat menarik adalah layar virtual yang mencakup semua tampilan di desktop.

[in] lprcClip

Penunjuk ke struktur RECT yang menentukan persegi panjang kliping. Wilayah yang menarik adalah persimpangan persegi panjang kliping dengan wilayah yang terlihat yang ditentukan oleh hdc.

Jika hdcnon-NULL, koordinat persegi panjang kliping relatif terhadap asal hdc. Jika hdcADALAH NULL, koordinatnya adalah koordinat layar virtual.

Parameter ini bisa NULL jika Anda tidak ingin mengklip wilayah yang ditentukan oleh hdc.

[in] lpfnEnum

Penunjuk ke fungsi panggilan balik yang ditentukan aplikasi MonitorEnumProc .

[in] dwData

Data yang ditentukan aplikasi yang diteruskan EnumDisplayMonitors langsung ke fungsi MonitorEnumProc .

Mengembalikan nilai

Jika fungsi berhasil, nilai yang dikembalikan bukan nol.

Jika fungsi gagal, nilai yang dikembalikan adalah nol.

Keterangan

Ada dua alasan untuk memanggil fungsi EnumDisplayMonitors :

  • Anda ingin menggambar secara optimal ke dalam konteks perangkat yang mencakup beberapa monitor tampilan, dan monitor memiliki format warna yang berbeda.
  • Anda ingin mendapatkan gagang dan persegi posisi untuk satu atau beberapa monitor tampilan.
Untuk menentukan apakah semua monitor tampilan dalam sistem memiliki format warna yang sama, panggil GetSystemMetrics (SM_SAMEDISPLAYFORMAT).

Anda tidak perlu menggunakan fungsi EnumDisplayMonitors saat jendela mencakup monitor tampilan yang memiliki format warna yang berbeda. Anda dapat terus melukis dengan asumsi bahwa seluruh layar memiliki properti warna monitor utama. Jendela Anda akan terlihat baik-baik saja. EnumDisplayMonitors hanya memungkinkan Anda membuatnya terlihat lebih baik.

Mengatur parameter hdc ke NULL memungkinkan Anda menggunakan fungsi EnumDisplayMonitors untuk mendapatkan persegi panjang handel dan posisi untuk satu atau beberapa monitor tampilan. Tabel berikut menunjukkan bagaimana empat kombinasi nilai NULL dan non-NULLhdc dan lprcClip memengaruhi perilaku fungsi EnumDisplayMonitors .

Hdc lprcRect Perilaku EnumDisplayMonitors
NULL NULL Menghitung semua monitor tampilan. Fungsi panggilan balik menerima HDC NULL .
NULL non-NULL Menghitung semua monitor tampilan yang berpotongan persegi panjang kliping. Gunakan koordinat layar virtual untuk persegi panjang kliping. Fungsi panggilan balik menerima HDC NULL .
non-NULL NULL Menghitung semua monitor tampilan yang bersinggungan dengan wilayah konteks perangkat yang terlihat. Fungsi panggilan balik menerima handel ke DC untuk monitor tampilan tertentu.
non-NULL non-NULL Menghitung semua monitor tampilan yang berpotongan dengan wilayah konteks perangkat yang terlihat dan persegi panjang kliping. Gunakan koordinat konteks perangkat untuk persegi panjang kliping. Fungsi panggilan balik menerima handel ke DC untuk monitor tampilan tertentu.
 

Contoh

Untuk melukis sebagai respons terhadap pesan WM_PAINT, menggunakan kemampuan setiap monitor, Anda dapat menggunakan kode seperti ini dalam prosedur jendela:


case WM_PAINT:
  hdc = BeginPaint(hwnd, &ps);
  EnumDisplayMonitors(hdc, NULL, MyPaintEnumProc, 0);
  EndPaint(hwnd, &ps);

Untuk melukis bagian atas jendela menggunakan kemampuan setiap monitor, Anda dapat menggunakan kode seperti ini:


GetClientRect(hwnd, &rc);
rc.bottom = (rc.bottom - rc.top) / 2;
hdc = GetDC(hwnd);
EnumDisplayMonitors(hdc, &rc, MyPaintEnumProc, 0);
ReleaseDC(hwnd, hdc);

Untuk melukis seluruh layar virtual secara optimal untuk setiap monitor tampilan, Anda dapat menggunakan kode seperti ini:


hdc = GetDC(NULL);
EnumDisplayMonitors(hdc, NULL, MyPaintScreenEnumProc, 0);
ReleaseDC(NULL, hdc);

Untuk mengambil informasi tentang semua monitor tampilan, gunakan kode seperti ini:


EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0);  

Persyaratan

   
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header winuser.h (termasuk Windows.h)
Pustaka User32.lib
DLL User32.dll
Set API ext-ms-win-ntuser-sysparams-ext-l1-1-1 (diperkenalkan dalam Windows 10, versi 10.0.14393)

Lihat juga

GetSystemMetrics

MonitorEnumProc

Beberapa Fungsi Monitor Tampilan

Gambaran Umum Monitor Beberapa Tampilan