Memposisikan Objek pada Beberapa Monitor Tampilan

Jendela atau menu yang ada di lebih dari satu monitor menyebabkan gangguan visual bagi penampil. Untuk meminimalkan masalah ini, sistem menampilkan menu dan jendela baru dan dimaksimalkan pada satu monitor. Tabel berikut ini memperlihatkan bagaimana monitor dipilih.

Object Lokasi
jendela CreateWindow(Ex) menampilkan jendela pada monitor yang berisi bagian terbesar jendela. Memaksimalkan pada monitor yang berisi bagian terbesar jendela sebelum diminimalkan.
Kombinasi tombol ALT-TAB menampilkan jendela pada monitor yang memiliki jendela yang saat ini aktif.
jendela yang dimiliki pada monitor yang sama dengan pemiliknya.
Submenu Muncul di monitor yang berisi bagian terbesar dari item menu yang sesuai.
menu konteks Muncul di monitor tempat klik kanan terjadi.
daftar drop-down Muncul di monitor yang berisi persegi panjang kotak kombo.
kotak dialog Muncul di monitor jendela yang memilikinya. Jika didefinisikan dengan gaya DS_CENTERMOUSE, itu muncul di monitor dengan mouse.
Jika tidak memiliki pemilik dan jendela aktif dan kotak dialog berada dalam aplikasi yang sama, kotak dialog muncul di monitor jendela yang saat ini aktif.
Jika kotak dialog tidak memiliki pemilik dan jendela aktif tidak berada dalam aplikasi yang sama dengan kotak dialog, kotak dialog muncul di monitor utama.
kotak pesan Muncul di monitor jendela yang memilikinya.

 

Jika jendela menyimpang dua monitor dan salah satu monitor diposisikan ulang, sistem memposisikan jendela pada monitor yang berisi bagian terbesar dari jendela asli.

Aplikasi juga biasanya perlu memposisikan objek. Misalnya, jendela mungkin perlu dibuat pada monitor yang sama dengan jendela lain.

Untuk memposisikan objek pada sistem monitor ganda

  1. Tentukan monitor yang sesuai.
  2. Dapatkan koordinat ke monitor.
  3. Posisikan objek menggunakan koordinat.

Biasanya, Anda akan memposisikan objek baik di monitor utama atau pada monitor yang sudah memiliki objek di dalamnya. Untuk mengidentifikasi monitor untuk titik, persegi panjang, atau jendela tertentu, gunakan MonitorFromPoint, MonitorFromRect, dan MonitorFromWindow.

Untuk mendapatkan koordinat monitor, gunakan GetMonitorInfo, yang menyediakan area kerja dan seluruh persegi monitor. Perhatikan bahwa SM_CXSCREEN dan SM_CYSCREEN selalu merujuk ke monitor utama, belum tentu monitor yang menampilkan aplikasi Anda. Selain itu, hindari SM_xxVIRTUALSCREEN karena ini berpusat pada jendela Anda di layar virtual, bukan monitor.

Untuk memusatkan kotak dialog di area kerja jendela, gunakan gaya DS_CENTER. Untuk memisahkan kotak dialog ke jendela aplikasi, gunakan GetWindowRect. Windows secara otomatis membatasi menu dan kotak dialog ke monitor. Namun, mungkin ada masalah untuk menu kustom, kotak drop-down kustom, palet alat kustom, dan posisi aplikasi yang disimpan.

Untuk contoh cara memposisikan objek dengan benar, lihat Memposisikan Objek pada Penyetelan Beberapa Tampilan.

Menggunakan SM_CXSCREEN dan SM_CYSCREEN untuk menentukan lokasi toolbar desktop aplikasi (juga disebut appbar) membatasi appbar ke monitor utama. Untuk memungkinkan appbar berada di tepi monitor apa pun, gunakan metrik sistem yang sesuai untuk menghitung tepi monitor. Selain itu, gunakan makro GET_X_LPARAM dan GET_Y_LPARAM untuk mengekstrak koordinat, jika tidak, tanda koordinat mungkin salah. Makro ini disertakan dalam Windowsx.h.

Ukuran jendela layar penuh perlu berubah saat bergerak di antara monitor dengan resolusi yang berbeda. Untuk melakukan ini, aplikasi harus memeriksa jendela apa itu, menggunakan MonitorFromWindow atau MonitorFromPoint , lalu menggunakan GetMonitorInfo untuk mendapatkan ukuran monitor. Sebagai alternatif, Anda dapat menggunakan HMONITOR dari fungsi DirectX DirectDrawEnumerateEx . Kemudian gunakan SetWindowPos untuk memosisikan dan mengukur jendela untuk menutupi monitor.

Jendela yang dimaksimalkan tidak mencakup taskbar yang memiliki properti "Selalu di atas". Namun, jendela layar penuh mencakup taskbar--misalnya, di Microsoft PowerPoint peragaan slide dan game.

Untuk menyimpan, dan memulihkannya nanti, posisi jendela saat aplikasi keluar, gunakan fungsi GetWindowPlacement dan SetWindowPlacement . Namun, periksa apakah posisi masih valid sebelum menggunakannya karena monitor bisa saja dipindahkan atau dihapus dari sistem. Aplikasi menampilkan jendela pada monitor utama jika HMONITOR jendela tidak valid.

Sistem mencoba memulai aplikasi pada monitor yang berisi pintasannya. Jadi, salah satu cara untuk memosisikan aplikasi adalah dengan memiliki pintasannya pada monitor yang diinginkan.

Jika Anda menggunakan ShellExecute atau ShellExecuteEx , berikan hWnd sehingga sistem akan membuka jendela baru pada monitor yang sama dengan aplikasi panggilan.

Perhatikan bahwa nilai untuk struktur MINMAXINFO sedikit diubah untuk sistem dengan beberapa monitor.