Fungsi EnumDisplayMonitors (winuser.h)
Fungsi EnumDisplayMonitors menghitung monitor tampilan (termasuk pseudo-monitor tak terlihat yang terkait dengan driver pencerminan) yang berpotongan dengan 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 ADALAH 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 .
Nilai kembali
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 persegi panjang pegangan dan posisi untuk satu atau beberapa monitor tampilan.
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
Persyaratan | Nilai |
---|---|
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 (sertakan 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) |