Bagikan melalui


Tentang Beberapa Antarmuka Dokumen

Setiap dokumen dalam aplikasi antarmuka beberapa dokumen (MDI) ditampilkan di jendela anak terpisah dalam area klien jendela utama aplikasi. Aplikasi MDI umum mencakup aplikasi pemrosesan kata yang memungkinkan pengguna untuk bekerja dengan beberapa dokumen teks, dan aplikasi spreadsheet yang memungkinkan pengguna untuk bekerja dengan beberapa bagan dan spreadsheet. Untuk informasi selengkapnya, lihat topik berikut.

Bingkai, Klien, dan Windows Anak

Aplikasi MDI memiliki tiga jenis jendela: jendela bingkai, jendela klien MDI, serta sejumlah jendela anak. Jendela bingkai seperti jendela utama aplikasi: memiliki batas ukuran, bilah judul, menu jendela, tombol minimalkan, dan tombol maksimalkan. Aplikasi harus mendaftarkan kelas jendela untuk jendela bingkai dan menyediakan prosedur jendela untuk mendukungnya.

Aplikasi MDI tidak menampilkan output di area klien jendela bingkai. Sebaliknya, ini menampilkan jendela klien MDI. Jendela klien MDI adalah jenis khusus jendela anak milik kelas jendela yang telah terdaftar sebelumnya MDICLIENT. Jendela klien adalah anak dari jendela bingkai; berfungsi sebagai latar belakang untuk jendela anak. Ini juga menyediakan dukungan untuk membuat dan memanipulasi jendela anak. Misalnya, aplikasi MDI dapat membuat, mengaktifkan, atau memaksimalkan jendela anak dengan mengirim pesan ke jendela klien MDI.

Saat pengguna membuka atau membuat dokumen, jendela klien membuat jendela anak untuk dokumen tersebut. Jendela klien adalah jendela induk dari semua jendela anak MDI dalam aplikasi. Setiap jendela anak memiliki batas ukuran, bilah judul, menu jendela, tombol minimalkan, dan tombol maksimalkan. Karena jendela anak dipotong, jendela tersebut terbatas pada jendela klien dan tidak dapat muncul di luarnya.

Aplikasi MDI dapat mendukung lebih dari satu jenis dokumen. Misalnya, aplikasi spreadsheet umum memungkinkan pengguna untuk bekerja dengan bagan dan spreadsheet. Untuk setiap jenis dokumen yang didukungnya, aplikasi MDI harus mendaftarkan kelas jendela anak dan menyediakan prosedur jendela untuk mendukung jendela milik kelas tersebut. Untuk informasi selengkapnya tentang kelas jendela, lihat Kelas Jendela. Untuk informasi selengkapnya tentang prosedur jendela, lihat Prosedur Jendela.

Berikut ini adalah aplikasi MDI yang khas. Ini bernama Multipad.

jendela bingkai aplikasi mdi multipad dan jendela klien

Pembuatan Jendela Anak

Untuk membuat jendela anak, aplikasi MDI memanggil fungsi CreateMDIWindow atau mengirim pesan WM_MDICREATE ke jendela klien MDI. Cara yang lebih efisien untuk membuat jendela anak MDI adalah dengan memanggil fungsi CreateWindowEx , menentukan gaya WS_EX_MDICHILD diperluas.

Untuk menghancurkan jendela anak, aplikasi MDI mengirimkan pesan WM_MDIDESTROY ke jendela klien MDI.

Aktivasi Jendela Anak

Sejumlah jendela anak dapat muncul di jendela klien kapan saja, tetapi hanya satu yang dapat aktif. Jendela anak aktif diposisikan di depan semua jendela anak lainnya, dan batasnya disorot.

Pengguna dapat mengaktifkan jendela anak yang tidak aktif dengan mengkliknya. Aplikasi MDI mengaktifkan jendela anak dengan mengirim pesan WM_MDIACTIVATE ke jendela klien MDI. Saat jendela klien memproses pesan ini, jendela klien mengirim pesan WM_MDIACTIVATE ke prosedur jendela jendela anak untuk diaktifkan dan ke prosedur jendela anak yang dinonaktifkan.

Untuk mencegah jendela anak diaktifkan, tangani pesan WM_NCACTIVATE ke jendela anak dengan mengembalikan FALSE.

Sistem melacak posisi setiap jendela anak di tumpukan jendela yang tumpang tindih. Tumpukan ini dikenal sebagai Z-Order. Pengguna dapat mengaktifkan jendela anak berikutnya dalam urutan Z dengan mengklik Berikutnya dari menu jendela di jendela aktif. Aplikasi mengaktifkan jendela anak berikutnya (atau sebelumnya) dalam urutan Z dengan mengirim pesan WM_MDINEXT ke jendela klien.

Untuk mengambil handel ke jendela anak aktif, aplikasi MDI mengirimkan pesan WM_MDIGETACTIVE ke jendela klien.

Beberapa Menu Dokumen

Jendela bingkai aplikasi MDI harus menyertakan bilah menu dengan menu jendela. Menu jendela harus menyertakan item yang mengatur jendela anak di dalam jendela klien atau yang menutup semua jendela anak. Menu jendela aplikasi MDI yang khas mungkin menyertakan item dalam tabel berikut.

Item menu Tujuan
Petak Mengatur jendela anak dalam format petak peta sehingga masing-masing muncul secara keseluruhan di jendela klien.
Cascade Mengatur jendela anak dalam format kaskade. Jendela anak saling tumpang tindih, tetapi bilah judul masing-masing terlihat.
Menyusun Ikon Mengatur ikon jendela anak yang diminimalkan di sepanjang bagian bawah jendela klien.
Tutup Semua Menutup semua jendela anak.

 

Setiap kali jendela anak dibuat, sistem secara otomatis menambahkan item menu baru ke menu jendela. Teks item menu sama dengan teks pada bilah menu jendela anak baru. Dengan mengklik item menu, pengguna dapat mengaktifkan jendela anak yang sesuai. Ketika jendela anak dihancurkan, sistem secara otomatis menghapus item menu yang sesuai dari menu jendela.

Sistem dapat menambahkan hingga sepuluh item menu ke menu jendela. Saat jendela anak kesepuluh dibuat, sistem menambahkan item Windows Lainnya ke menu jendela. Mengklik item ini akan menampilkan kotak dialog Pilih Jendela . Kotak dialog berisi kotak daftar dengan judul semua jendela anak MDI yang saat ini tersedia. Pengguna dapat mengaktifkan jendela anak dengan mengklik judulnya di kotak daftar.

Jika aplikasi MDI Anda mendukung beberapa jenis jendela anak, sesuaikan bilah menu untuk mencerminkan operasi yang terkait dengan jendela aktif. Untuk melakukan ini, berikan sumber daya menu terpisah untuk setiap jenis jendela anak yang didukung aplikasi. Ketika jenis jendela anak baru diaktifkan, aplikasi harus mengirim pesan WM_MDISETMENU ke jendela klien, meneruskannya ke handel ke menu yang sesuai.

Ketika tidak ada jendela anak, bilah menu hanya boleh berisi item yang digunakan untuk membuat atau membuka dokumen.

Ketika pengguna menavigasi melalui menu aplikasi MDI dengan menggunakan kunci kursor, kunci berkinerja berbeda dari ketika pengguna menavigasi melalui menu aplikasi biasa. Dalam aplikasi MDI, kontrol meneruskan dari menu jendela aplikasi ke menu jendela jendela jendela anak aktif, lalu ke item pertama pada bilah menu.

Beberapa Akselerator Dokumen

Untuk menerima dan memproses kunci akselerator untuk jendela anaknya, aplikasi MDI harus menyertakan fungsi TranslateMDISysAccel dalam perulangan pesannya. Perulangan harus memanggil TranslateMDISysAccel sebelum memanggil fungsi TranslateAccelerator atau DispatchMessage .

Tombol akselerator pada menu jendela untuk jendela anak MDI berbeda dari tombol untuk jendela anak non-MDI. Di jendela anak MDI, kombinasi tombol ALT+ – (minus) membuka menu jendela, kombinasi tombol CTRL+F4 menutup jendela anak aktif, dan kombinasi tombol CTRL+F6 mengaktifkan jendela anak berikutnya.

Ukuran dan Pengaturan Jendela Anak

Aplikasi MDI mengontrol ukuran dan posisi jendela anaknya dengan mengirim pesan ke jendela klien MDI. Untuk memaksimalkan jendela anak aktif, aplikasi mengirim pesan WM_MDIMAXIMIZE ke jendela klien. Ketika jendela anak dimaksimalkan, area kliennya sepenuhnya mengisi jendela klien MDI. Selain itu, sistem secara otomatis menyembunyikan bilah judul jendela anak, dan menambahkan ikon menu jendela anak dan tombol Pulihkan ke bilah menu aplikasi MDI. Aplikasi dapat memulihkan jendela klien ke ukuran dan posisi asli (premaximized) dengan mengirim pesan WM_MDIRESTORE ke jendela klien.

Aplikasi MDI dapat mengatur jendela anaknya dalam format kaskade atau petak peta. Ketika jendela anak berskala, jendela muncul di tumpukan. Jendela di bagian bawah tumpukan menempati sudut kiri atas layar, dan jendela yang tersisa diimbangi secara vertikal dan horizontal sehingga batas kiri dan bilah judul setiap jendela anak terlihat. Untuk mengatur jendela anak dalam format kaskade, aplikasi MDI mengirimkan pesan WM_MDICASCADE . Biasanya, aplikasi mengirim pesan ini ketika pengguna mengklik Cascade pada menu jendela.

Ketika jendela anak diurutkan, sistem menampilkan setiap jendela anak secara keseluruhan — tidak ada jendela yang tumpang tindih. Semua jendela berukuran, seperlunya, agar pas dalam jendela klien. Untuk mengatur jendela anak dalam format petak peta, aplikasi MDI mengirimkan pesan WM_MDITILE ke jendela klien. Biasanya, aplikasi mengirim pesan ini ketika pengguna mengklik Petak peta pada menu jendela.

Aplikasi MDI harus menyediakan ikon yang berbeda untuk setiap jenis jendela anak yang didukungnya. Aplikasi menentukan ikon saat mendaftarkan kelas jendela anak. Sistem secara otomatis menampilkan ikon jendela anak di bagian bawah jendela klien saat jendela anak diminimalkan. Aplikasi MDI mengarahkan sistem untuk mengatur ikon jendela anak dengan mengirim pesan WM_MDIICONARRANGE ke jendela klien. Biasanya, aplikasi mengirim pesan ini ketika pengguna mengklik Atur Ikon pada menu jendela.

Ikon Judul Windows

Karena jendela anak MDI dapat diminimalkan, aplikasi MDI harus menghindari memanipulasi jendela judul ikon seolah-olah jendela anak MDI normal. Jendela judul ikon muncul ketika aplikasi menghitung jendela anak dari jendela klien MDI. Jendela judul ikon berbeda dari jendela anak lainnya, namun, di mana jendela tersebut dimiliki oleh jendela anak MDI.

Untuk menentukan apakah jendela anak adalah jendela judul ikon, gunakan fungsi GetWindow dengan indeks GW_OWNER. Jendela non-judul mengembalikan NULL. Perhatikan bahwa pengujian ini tidak mencukupi untuk jendela tingkat atas, karena menu dan kotak dialog adalah jendela yang dimiliki.

Data Jendela Anak

Karena jumlah jendela anak bervariasi tergantung pada berapa banyak dokumen yang dibuka pengguna, aplikasi MDI harus dapat mengaitkan data (misalnya, nama file saat ini) dengan setiap jendela anak. Ada dua cara untuk melakukannya:

  • Simpan data jendela anak di struktur jendela.
  • Gunakan properti jendela.

Struktur Jendela

Ketika aplikasi MDI mendaftarkan kelas jendela, aplikasi dapat memesan ruang ekstra dalam struktur jendela untuk data aplikasi khusus untuk kelas jendela tertentu ini. Untuk menyimpan dan mengambil data di ruang ekstra ini, aplikasi menggunakan fungsi GetWindowLong dan SetWindowLong .

Untuk mempertahankan sejumlah besar data untuk jendela anak, aplikasi dapat mengalokasikan memori untuk struktur data lalu menyimpan handel ke memori yang berisi struktur di ruang ekstra yang terkait dengan jendela anak.

Properti Jendela

Aplikasi MDI juga dapat menyimpan data per dokumen dengan menggunakan properti jendela. Data per dokumen adalah data khusus untuk jenis dokumen yang terkandung dalam jendela anak tertentu. Properti berbeda dari ruang ekstra dalam struktur jendela karena Anda tidak perlu mengalokasikan ruang ekstra saat mendaftarkan kelas jendela. Jendela dapat memiliki sejumlah properti. Selain itu, di mana offset digunakan untuk mengakses ruang ekstra dalam struktur jendela, properti disebut dengan nama string. Untuk informasi selengkapnya tentang properti jendela, lihat Properti Jendela.