Tentang Menu
Menu adalah daftar item yang menentukan opsi atau grup opsi (submenu) untuk aplikasi. Mengklik item menu membuka submenu atau menyebabkan aplikasi melakukan perintah. Bagian ini menyediakan informasi tentang topik berikut:
- Bilah menu dan Menu
- Akses Keyboard ke Menu
- Pembuatan Menu
- Item Menu
- Item Perintah dan Item yang Membuka Submenu
- Pengidentifikasi Menu-Item
- Posisi Menu-Item
- Mengakses Item Menu Secara Terprogram
- Item Menu Default
- Item Menu Terpilih dan Hapus
- Item Menu Diaktifkan, Abu-abu, dan Dinonaktifkan
- Item Menu Yang Disorot
- Item Menu Yang Digambar Pemilik
- Pemisah Item Menu dan Pemisah Baris
- Pesan yang Digunakan dengan Menu
- Penghancuran Menu
Bilah menu dan Menu
Menu diatur dalam hierarki. Di tingkat atas hierarki adalah bilah menu; yang berisi daftar menu, yang pada gilirannya dapat berisi submenu. Bilah menu terkadang disebut menu tingkat atas, dan menu dan submenu juga dikenal sebagai menu pop-up.
Item menu dapat melakukan perintah atau membuka submenu. Item yang menjalankan perintah disebut item perintah atau perintah.
Item pada bilah menu hampir selalu membuka menu. Bilah menu jarang berisi item perintah. Menu yang dibuka dari bilah menu turun dari bilah menu dan terkadang disebut menu drop-down. Saat menu drop-down ditampilkan, menu tersebut dilampirkan ke bilah menu. Item menu pada bilah menu yang membuka menu drop-down juga disebut nama menu.
Nama menu pada bilah menu mewakili kategori utama perintah yang disediakan aplikasi. Memilih nama menu dari bilah menu biasanya membuka menu yang item menunya sesuai dengan perintah dalam kategori. Misalnya, bilah menu mungkin berisi nama menu File yang, saat diklik oleh pengguna, mengaktifkan menu dengan item menu seperti Baru, Buka, dan Simpan. Untuk mendapatkan informasi tentang bilah menu, hubungi GetMenuBarInfo.
Hanya jendela pop-up yang tumpang tindih atau dapat berisi bilah menu; jendela anak tidak boleh berisi satu jendela. Jika jendela memiliki bilah judul, sistem memposisikan bilah menu tepat di bawahnya. Bilah menu selalu terlihat. Submenu tidak terlihat, namun, sampai pengguna memilih item menu yang mengaktifkannya. Untuk informasi selengkapnya tentang jendela yang tumpang tindih dan pop-up, lihat Jenis Jendela.
Setiap menu harus memiliki jendela pemilik. Sistem mengirim pesan ke jendela pemilik menu saat pengguna memilih menu atau memilih item dari menu.
Bagian ini membahas topik berikut.
Menu Pintasan
Sistem ini juga menyediakan menu pintasan. Menu pintasan tidak dilampirkan ke bilah menu; dapat muncul di mana saja di layar. Aplikasi biasanya mengaitkan menu pintasan dengan sebagian jendela, seperti area klien, atau dengan objek tertentu, seperti ikon. Untuk alasan ini, menu ini juga disebut menu konteks.
Menu pintasan tetap tersembunyi hingga pengguna mengaktifkannya, biasanya dengan mengklik kanan pilihan, toolbar, atau tombol taskbar. Menu biasanya ditampilkan pada posisi kursor caret atau mouse.
Menu Jendela
Menu Jendela (juga dikenal sebagai menu Sistem atau menu Kontrol ) adalah menu pop-up yang ditentukan dan dikelola hampir secara eksklusif oleh sistem operasi. Pengguna dapat membuka menu jendela dengan mengklik ikon aplikasi pada bilah judul atau dengan mengklik kanan di mana saja pada bilah judul.
Menu Jendela menyediakan sekumpulan item menu standar yang dapat dipilih pengguna untuk mengubah ukuran atau posisi jendela, atau menutup aplikasi. Item pada menu jendela dapat ditambahkan, dihapus, dan dimodifikasi, tetapi sebagian besar aplikasi hanya menggunakan kumpulan item menu standar. Jendela tumpang tindih, pop-up, atau anak dapat memiliki menu jendela. Tidak jarang jendela pop-up atau tumpang tindih tidak menyertakan menu jendela.
Saat pengguna memilih perintah dari menu Jendela, sistem mengirim pesan WM_SYSCOMMAND ke jendela pemilik menu. Di sebagian besar aplikasi, prosedur jendela tidak memproses pesan dari menu jendela. Sebaliknya, itu hanya meneruskan pesan ke fungsi DefWindowProc untuk pemrosesan pesan default sistem. Jika aplikasi menambahkan perintah ke menu jendela, prosedur jendela harus memproses perintah.
Aplikasi dapat menggunakan fungsi GetSystemMenu untuk membuat salinan menu jendela default untuk dimodifikasi. Jendela apa pun yang tidak menggunakan fungsi GetSystemMenu untuk membuat salinan menu jendelanya sendiri menerima menu jendela standar.
Pengidentifikasi Bantuan
Terkait dengan setiap bilah menu, menu, submenu, dan menu pintasan adalah pengidentifikasi bantuan. Jika pengguna menekan tombol F1 saat menu aktif, nilai ini dikirim ke jendela pemilik sebagai bagian dari pesan WM_HELP .
Akses Keyboard ke Menu
Sistem ini menyediakan antarmuka keyboard standar untuk menu. Anda dapat meningkatkan antarmuka ini dengan menyediakan kunci akses mnemonik dan kunci pintasan (akselerator) untuk item menu Anda.
Topik berikut menjelaskan antarmuka keyboard standar, tombol akses, dan tombol pintasan:
Antarmuka Keyboard Standar
Sistem ini dirancang untuk bekerja dengan atau tanpa mouse atau perangkat penunjuk lainnya. Karena sistem menyediakan antarmuka keyboard standar, pengguna dapat menggunakan keyboard untuk memilih item menu. Antarmuka keyboard ini tidak memerlukan kode khusus. Aplikasi menerima pesan perintah apakah pengguna memilih item menu melalui keyboard atau dengan menggunakan mouse. Antarmuka keyboard standar memproses penekanan tombol berikut.
Tekanan tombol | Perbuatan |
---|---|
Karakter alfabet | Memilih item menu pertama dengan karakter yang ditentukan sebagai kunci aksesnya. Jika item yang dipilih memanggil menu, menu ditampilkan dan item pertama disorot. Jika tidak, item menu dipilih. |
ALT | Beralih ke mode bilah menu dan keluar. |
ALT+SPACEBAR | Menampilkan menu jendela. |
MASUKKAN | Mengaktifkan menu dan memilih item menu pertama jika item memiliki menu yang terkait dengannya. Jika tidak, penekanan tombol ini memilih item seolah-olah pengguna melepaskan tombol mouse saat item dipilih. |
ESC | Keluar dari mode menu. |
PANAH KIRI | Siklus ke item menu tingkat atas sebelumnya. Item menu tingkat atas menyertakan nama menu dan menu jendela. Jika item yang dipilih ada di menu, kolom sebelumnya di menu dipilih atau item menu tingkat atas sebelumnya dipilih. |
PANAH KANAN | Berfungsi seperti tombol PANAH KIRI, kecuali ke arah yang berlawanan. Di menu, penekanan tombol ini bergerak maju satu kolom; ketika item yang saat ini dipilih berada di kolom paling kanan, menu berikutnya dipilih. |
PANAH ATAS atau BAWAH | Mengaktifkan menu ketika ditekan dalam nama menu. Saat ditekan di menu, penekanan tombol PANAH ATAS memilih item sebelumnya; penekanan tombol PANAH BAWAH memilih item berikutnya. |
Tombol Akses Menu
Antarmuka keyboard standar untuk menu dapat ditingkatkan dengan menambahkan tombol akses (mnemonics) ke item menu. Kunci akses adalah huruf bergaris bawah dalam teks item menu. Saat menu aktif, pengguna dapat memilih item menu dengan menekan tombol yang sesuai dengan huruf bergaris bawah item. Pengguna membuat bilah menu aktif dengan menekan tombol ALT untuk menyoroti item pertama pada bilah menu. Menu aktif saat ditampilkan.
Untuk membuat kunci akses untuk item menu, awali karakter apa pun dalam string teks item dengan ampersand. Misalnya, string teks "&Move" menyebabkan sistem menggaris bawahi huruf "M".
Tombol Pintasan Menu
Selain memiliki kunci akses, item menu dapat memiliki kunci pintasan yang terkait dengannya. Kunci pintasan berbeda dari kunci akses, karena menu tidak harus aktif agar kunci pintasan berfungsi. Selain itu, kunci akses selalu dikaitkan dengan item menu, sementara kunci pintasan biasanya (tetapi tidak harus) dikaitkan dengan item menu.
Teks yang mengidentifikasi kunci pintasan ditambahkan ke string teks item menu. Teks pintasan muncul di sebelah kanan nama item menu, setelah garis miring terbelakang dan karakter tab (\t). Misalnya, "&Close\tAlt+F4" mewakili perintah Tutup dengan kombinasi tombol ALT+F4 sebagai kunci pintasannya dan dengan huruf "C" sebagai kunci aksesnya. Untuk informasi selengkapnya, lihat Akselerator Keyboard.
Pembuatan Menu
Anda dapat membuat menu menggunakan templat menu atau fungsi pembuatan menu. Templat menu biasanya didefinisikan sebagai sumber daya. Sumber daya templat menu dapat dimuat secara eksplisit atau ditetapkan sebagai menu default untuk kelas jendela. Anda juga dapat membuat sumber daya templat menu secara dinamis dalam memori.
Topik berikut menjelaskan pembuatan menu secara rinci:
- Menu Sumber Daya Templat
- Templat Menu dalam Memori
- Handel Menu
- Fungsi Pembuatan Menu
- Tampilan Menu
- Menu Kelas Jendela
Menu Sumber Daya Templat
Sebagian besar aplikasi membuat menu menggunakan sumber daya templat menu. Templat menu menentukan menu, termasuk item di bilah menu dan semua menu. Untuk informasi tentang membuat sumber daya templat menu, lihat dokumentasi yang disertakan dengan alat pengembangan Anda.
Setelah Membuat sumber daya templat menu dan menambahkannya ke file executable (.exe) aplikasi, Anda dapat menggunakan fungsi LoadMenu untuk memuat sumber daya ke dalam memori. Fungsi ini mengembalikan handel ke menu, yang kemudian dapat Anda tetapkan ke jendela dengan menggunakan fungsi SetMenu. Anda dapat menetapkan menu ke jendela mana pun yang bukan jendela anak.
Menerapkan menu sebagai sumber daya membuat aplikasi lebih mudah dilokalkan untuk digunakan di beberapa negara/wilayah. Hanya file definisi sumber daya yang perlu dilokalkan untuk setiap bahasa, bukan kode sumber aplikasi.
Templat Menu dalam Memori
Menu dapat dibuat dari templat menu yang dibangun dalam memori pada waktu proses. Misalnya, aplikasi yang memungkinkan pengguna untuk menyesuaikan menunya dapat membuat templat menu dalam memori berdasarkan preferensi pengguna. Aplikasi kemudian dapat menyimpan templat dalam file atau di registri untuk digunakan di masa mendatang. Untuk membuat menu dari templat dalam memori, gunakan fungsi LoadMenuIndirect. Untuk deskripsi format templat menu, lihat Menu Sumber Daya Templat.
Templat menu standar terdiri dari struktur MENUITEMTEMPLATEHEADER diikuti oleh satu atau beberapa struktur MENUITEMTEMPLATE.
Templat menu yang diperluas terdiri dari struktur MENUEX_TEMPLATE_HEADER diikuti oleh satu atau beberapa struktur MENUEX_TEMPLATE_ITEM.
Handel Menu
Sistem menghasilkan handel unik untuk setiap menu. Handel menu adalah nilai dari jenis HMENU. Aplikasi harus menentukan handel menu di banyak fungsi menu. Anda menerima handel ke bilah menu saat membuat menu atau memuat sumber daya menu.
Untuk mengambil handel ke bilah menu untuk menu yang telah dibuat atau dimuat, gunakan fungsi GetMenu. Untuk mengambil handel ke submenu yang terkait dengan item menu, gunakan fungsi GetSubMenu atau GetMenuItemInfo. Untuk mengambil handel ke menu jendela, gunakan fungsi GetSystemMenu.
Fungsi Pembuatan Menu
Dengan menggunakan fungsi pembuatan menu, Anda dapat membuat menu pada run time atau menambahkan item menu ke menu yang sudah ada. Anda dapat menggunakan fungsi CreateMenu untuk membuat bilah menu kosong dan fungsi CreatePopupMenu untuk membuat menu kosong. Anda dapat menyimpan informasi pengaturan tertentu untuk menu dengan menggunakan struktur MENUINFO. Untuk mendapatkan atau mengambil pengaturan menu, gunakan GetMenuInfo atau SetMenuInfo. Untuk menambahkan item ke menu, gunakan fungsi InsertMenuItem. Fungsi AppendMenu dan InsertMenu yang lebih lama masih didukung, tetapi InsertMenuItem harus digunakan untuk aplikasi baru.
Tampilan Menu
Setelah menu dimuat atau dibuat, menu harus ditetapkan ke jendela sebelum sistem dapat menampilkannya. Anda dapat menetapkan menu dengan menentukan menu kelas. Untuk informasi selengkapnya, lihat Menu Kelas Jendela. Anda juga dapat menetapkan menu ke jendela dengan menentukan handel ke menu sebagai parameter hMenu dari fungsi CreateWindow atau CreateWindowEx, atau dengan memanggil fungsi SetMenu.
Untuk menampilkan menu pintasan, gunakan fungsi TrackPopupMenuEx. Menu pintasan, juga disebut menu pop-up mengambang atau menu konteks, biasanya ditampilkan saat pesan WM_CONTEXTMENU diproses.
Anda dapat menetapkan menu ke jendela mana pun yang bukan jendela anak.
Fungsi TrackPopupMenu yang lebih lama masih didukung, tetapi aplikasi baru harus menggunakan fungsi TrackPopupMenuEx.
Menu Kelas Jendela
Anda dapat menentukan menu default, yang disebut menu kelas, saat mendaftarkan kelas jendela. Untuk melakukannya, Anda menetapkan nama sumber daya menu-template ke anggota lpszMenuName dari struktur WNDCLASS yang digunakan untuk mendaftarkan kelas.
Secara default, setiap jendela diberi menu kelas untuk kelas jendelanya sehingga Anda tidak perlu memuat menu secara eksplisit dan menetapkannya ke setiap jendela. Anda dapat mengganti menu kelas dengan menentukan handel menu yang berbeda dalam panggilan ke fungsi CreateWindowEx. Anda juga dapat mengubah menu jendela setelah dibuat dengan menggunakan fungsi SetMenu. Untuk informasi selengkapnya, lihat Kelas Jendela.
Item menu
Topik berikut membahas apa yang dilakukan sistem ketika pengguna memilih item menu, dan cara aplikasi dapat mengontrol tampilan dan fungsionalitas item:
- Item Perintah dan Item yang Membuka Submenu
- Pengidentifikasi Menu-Item
- Posisi Menu-Item
- Mengakses Item Menu Secara Terprogram
- Item Menu Default
- Item Menu Terpilih dan Hapus
- Item Menu Diaktifkan, Abu-abu, dan Dinonaktifkan
- Item Menu Yang Disorot
- Item Menu Yang Digambar Pemilik
- Pemisah Item Menu dan Pemisah Baris
Item Perintah dan Item yang Membuka Submenu
Saat pengguna memilih item perintah, sistem mengirim pesan perintah ke jendela yang memiliki menu. Jika item perintah ada di menu jendela, sistem akan mengirim pesan WM_SYSCOMMAND. Jika tidak, ini akan mengirim pesan WM_COMMAND.
Terkait dengan setiap item menu yang membuka submenu adalah handel ke submenu yang sesuai. Ketika pengguna menunjuk ke item seperti itu, sistem membuka submenu. Tidak ada pesan perintah yang dikirim ke jendela pemilik. Namun, sistem mengirim pesan WM_INITMENUPOPUP ke jendela pemilik sebelum menampilkan submenu. Anda bisa mendapatkan handel ke submenu yang terkait dengan item dengan menggunakan fungsi GetSubMenu atau GetMenuItemInfo.
Bilah menu biasanya berisi nama menu, tetapi juga dapat berisi item perintah. Submenu biasanya berisi item perintah, tetapi juga dapat berisi item yang membuka submenu berlapis. Dengan menambahkan item tersebut ke submenu, Anda dapat menu bersarang ke kedalaman apa pun. Untuk memberikan isjin visual bagi pengguna, sistem secara otomatis menampilkan panah kecil di sebelah kanan teks item menu yang membuka submenu.
Pengidentifikasi Menu-Item
Terkait dengan setiap item menu adalah bilangan bulat unik yang ditentukan aplikasi, yang disebut pengidentifikasi item menu. Saat pengguna memilih item perintah dari menu, sistem mengirim pengidentifikasi item ke jendela pemilik sebagai bagian dari pesan WM_COMMAND . Prosedur jendela memeriksa pengidentifikasi untuk menentukan sumber pesan, dan memproses pesan yang sesuai. Selain itu, Anda dapat menentukan item menu menggunakan pengidentifikasinya saat memanggil fungsi menu; misalnya, untuk mengaktifkan atau menonaktifkan item menu.
Item menu yang membuka submenu memiliki pengidentifikasi seperti halnya item perintah. Namun, sistem tidak mengirim pesan perintah ketika item tersebut dipilih dari menu. Sebaliknya, sistem membuka submenu yang terkait dengan item menu.
Untuk mengambil pengidentifikasi item menu pada posisi tertentu, gunakan fungsi GetMenuItemID atau GetMenuItemInfo.
Posisi Menu-Item
Selain memiliki pengidentifikasi unik, setiap item menu di bilah menu atau menu memiliki nilai posisi yang unik. Item paling kiri di bilah menu, atau item atas di menu, memiliki posisi nol. Nilai posisi akan dinaikkan untuk item menu berikutnya. Sistem menetapkan nilai posisi ke semua item dalam menu, termasuk pemisah. Ilustrasi berikut ini memperlihatkan nilai posisi item di bilah menu dan di menu.
Saat memanggil fungsi menu yang memodifikasi atau mengambil informasi tentang item menu tertentu, Anda dapat menentukan item menggunakan pengidentifikasi atau posisinya. Untuk informasi lebih lanjut, lihat bagian berikutnya.
Mengakses Item Menu Secara Terprogram
Sebagian besar fungsi menu memungkinkan Anda menentukan item menu baik berdasarkan posisi atau menurut perintah. Beberapa fungsi menggunakan bendera MF_BYPOSITION dan MF_BYCOMMAND untuk menunjukkan algoritma pencarian; yang lain memiliki parameter fByPosition eksplisit. Jika Anda menentukan item menu menurut posisi, nomor item adalah indeks berbasis nol ke dalam menu. Jika Anda menentukan item menu berdasarkan perintah, menu dan submenunya dicari item yang pengidentifikasi menunya sama dengan nomor item yang disediakan. Jika lebih dari satu item dalam hierarki menu cocok dengan nomor item, item tersebut tidak ditentukan mana yang digunakan. Jika menu Anda berisi pengidentifikasi menu duplikat, Anda harus menggunakan operasi menu berbasis posisi untuk menghindari ambiguitas ini.
Item Menu Default
Submenu dapat berisi satu item menu default. Ketika pengguna membuka submenu dengan mengklik dua kali, sistem mengirim pesan perintah ke jendela pemilik menu dan menutup menu seolah-olah item perintah default telah dipilih. Jika tidak ada item perintah default, submenu tetap terbuka. Untuk mengambil dan mengatur item default untuk submenu, gunakan fungsi GetMenuDefaultItem dan SetMenuDefaultItem.
Item Menu Terpilih dan Hapus
Item menu dapat dipilih atau dihapus. Sistem menampilkan bitmap di samping item menu terpilih untuk menunjukkan status yang dipilih. Sistem tidak menampilkan bitmap di samping item yang jelas, kecuali bitmap "jelas" yang ditentukan aplikasi ditentukan. Hanya item menu dalam menu yang dapat dipilih; item dalam bilah menu tidak dapat dipilih.
Aplikasi biasanya memeriksa atau menghapus item menu untuk menunjukkan apakah opsi berlaku. Misalnya, aplikasi memiliki toolbar yang dapat ditampilkan atau disembunyikan pengguna dengan menggunakan perintah Toolbar pada menu. Saat bilah alat disembunyikan, item menu Bilah Alat kosong. Saat pengguna memilih perintah, aplikasi memeriksa item menu dan menampilkan toolbar.
Atribut tanda centang mengontrol apakah item menu dipilih. Anda dapat mengatur atribut tanda centang item menu dengan menggunakan fungsi CheckMenuItem. Anda dapat menggunakan fungsi GetMenuState untuk menentukan apakah item menu saat ini dipilih atau dibersihkan.
Alih-alih CheckMenuItem dan GetMenuState, Anda dapat menggunakan fungsi GetMenuItemInfo dan SetMenuItemInfo untuk mengambil dan mengatur status pemeriksaan item menu.
Terkadang, sekelompok item menu sesuai dengan sekumpulan opsi yang saling eksklusif. Dalam hal ini, Anda dapat menunjukkan opsi yang dipilih dengan menggunakan item menu radio yang dipilih (dianalogikan ke kontrol tombol radio). Item radio terpilih ditampilkan dengan bitmap poin alih-alih bitmap tanda centang. Untuk memeriksa item menu dan menjadikannya item radio, gunakan fungsi CheckMenuRadioItem.
Secara default, sistem menampilkan tanda centang atau bitmap poin di samping item menu yang dipilih dan tidak ada bitmap di samping item menu yang dikosongkan. Namun, Anda dapat menggunakan fungsi SetMenuItemBitmaps untuk mengaitkan bitmap yang ditentukan aplikasi yang dipilih dan dibersihkan dengan item menu. Sistem kemudian menggunakan bitmap yang ditentukan untuk menunjukkan status item menu yang dipilih atau dihapus.
Bitmap yang ditentukan aplikasi yang terkait dengan item menu harus berukuran sama dengan bitmap tanda centang default, dimensi yang dapat bervariasi tergantung pada resolusi layar. Untuk mengambil dimensi yang benar, gunakan fungsi GetSystemMetrics. Anda dapat membuat beberapa sumber daya bitmap untuk resolusi layar yang berbeda; buat satu sumber daya bitmap dan skalakan, jika perlu; atau buat bitmap pada waktu proses dan gambar di dalamnya. Bitmap mungkin monokrom atau warna. Namun, karena item menu terbalik saat disorot, tampilan bitmap warna terbalik tertentu mungkin tidak diinginkan. Untuk informasi selengkapnya, lihat Bitmap.
Item Menu Diaktifkan, Abu-abu, dan Dinonaktifkan
Item menu dapat diaktifkan, berwarna abu-abu, atau dinonaktifkan. Secara default, item menu diaktifkan. Ketika pengguna memilih item menu yang diaktifkan, sistem mengirim pesan perintah ke jendela pemilik atau menampilkan submenu yang sesuai, tergantung pada jenis item menunya.
Ketika item menu tidak tersedia untuk pengguna, item harus berwarna abu-abu atau dinonaktifkan. Item menu abu-abu dan dinonaktifkan tidak dapat dipilih. Item yang dinonaktifkan terlihat seperti item yang diaktifkan. Ketika pengguna mengklik item yang dinonaktifkan, item tidak dipilih, dan tidak ada yang terjadi. Item yang dinonaktifkan dapat berguna di, misalnya, tutorial yang menyajikan menu yang terlihat aktif tetapi tidak.
Aplikasi berwarna abu-abu pada item menu yang tidak tersedia untuk memberikan isjin visual kepada pengguna bahwa perintah tidak tersedia. Anda dapat menggunakan item abu-abu ketika tindakan tidak sesuai (misalnya, Anda dapat memerah perintah Cetak di menu File ketika sistem tidak menginstal printer).
Fungsi EnableMenuItem memungkinkan, berwarna abu-abu, atau menonaktifkan item menu. Untuk menentukan apakah item menu diaktifkan, berwarna abu-abu, atau dinonaktifkan, gunakan fungsi GetMenuItemInfo.
Alih-alih GetMenuItemInfo, Anda juga dapat menggunakan fungsi GetMenuState untuk menentukan apakah item menu diaktifkan, berwarna abu-abu, atau dinonaktifkan.
Item Menu Yang Disorot
Sistem secara otomatis menyoroti item menu pada menu saat pengguna memilihnya. Namun, penyorotan dapat secara eksplisit ditambahkan atau dihapus dari nama menu pada bilah menu dengan menggunakan fungsi HiliteMenuItem. Fungsi ini tidak berpengaruh pada item menu pada menu. Namun, saat HiliteMenuItem digunakan untuk menyoroti nama menu, nama hanya tampak dipilih. Jika pengguna menekan tombol ENTER, item yang disorot tidak dipilih. Fitur ini mungkin berguna di, misalnya, aplikasi pelatihan yang menunjukkan penggunaan menu.
Item Menu Yang Digambar Pemilik
Aplikasi dapat sepenuhnya mengontrol tampilan item menu dengan menggunakan item yang digambar pemilik. Item yang digambar pemilik mengharuskan aplikasi bertanggung jawab total untuk menggambar status yang dipilih (disorot), dipilih, dan dihapus. Misalnya, jika aplikasi menyediakan menu font, aplikasi dapat menggambar setiap item menu dengan menggunakan font yang sesuai; item untuk Romawi akan digambar dengan romawi, item untuk Miring akan digambar secara miring, dan sebagainya. Untuk informasi selengkapnya, lihat Membuat Item Menu Yang Digambar Pemilik.
Pemisah Item Menu dan Pemisah Baris
Sistem menyediakan jenis item menu khusus, yang disebut pemisah, yang muncul sebagai garis horizontal. Anda dapat menggunakan pemisah untuk membagi menu menjadi grup item terkait. Pemisah tidak dapat digunakan di bilah menu, dan pengguna tidak dapat memilih pemisah.
Ketika bilah menu berisi lebih banyak nama menu daripada yang akan pas pada satu baris, sistem membungkus bilah menu dengan secara otomatis memecahnya menjadi dua baris atau lebih. Anda dapat menyebabkan hentian baris terjadi pada item tertentu pada bilah menu dengan menetapkan bendera jenis MFT_MENUBREAK ke item. Sistem menempatkan item tersebut dan semua item berikutnya pada baris baru.
Ketika menu berisi lebih banyak item daripada yang akan pas dalam satu kolom, menu akan dipotong. Anda dapat menyebabkan hentian kolom terjadi pada item tertentu di menu dengan menetapkan bendera jenis MFT_MENUBREAK ke item atau menggunakan opsi MENUBREAK dalam pernyataan MENUITEM . Sistem menempatkan item tersebut dan semua item berikutnya di kolom baru. Bendera jenis MFT_MENUBARBREAK memiliki efek yang sama, kecuali bahwa garis vertikal muncul antara kolom baru dan yang lama.
Jika Anda menggunakan fungsi AppendMenu, InsertMenu, atau ModifikasiMenu untuk menetapkan hentian baris, Anda harus menetapkan bendera jenis MF_MENUBREAK atau MF_MENUBARBREAK.
Pesan yang Digunakan dengan Menu
Sistem melaporkan aktivitas terkait menu dengan mengirim pesan ke prosedur jendela jendela yang memiliki menu. Sistem mengirim serangkaian pesan ketika pengguna memilih item pada bilah menu atau mengklik tombol kanan mouse untuk menampilkan menu pintasan.
Saat pengguna mengaktifkan item pada bilah menu, jendela pemilik terlebih dahulu menerima pesan WM_SYSCOMMAND. Pesan ini menyertakan bendera yang menunjukkan apakah pengguna mengaktifkan menu dengan menggunakan keyboard (SC_KEYMENU) atau mouse (SC_MOUSEMENU). Untuk informasi selengkapnya, lihat Akses Keyboard ke Menu.
Selanjutnya, sebelum menampilkan menu apa pun, sistem mengirim pesan WM_INITMENU ke prosedur jendela sehingga aplikasi dapat memodifikasi menu sebelum pengguna melihatnya. Sistem mengirim pesan WM_INITMENU hanya sekali per aktivasi menu.
Ketika pengguna menunjuk ke item menu yang membuka submenu, sistem mengirim jendela pemilik pesan WM_INITMENUPOPUP sebelum menampilkan submenu. Pesan ini memberi aplikasi kesempatan untuk memodifikasi submenu sebelum ditampilkan.
Setiap kali pengguna memindahkan penyorotan dari satu item ke item lainnya, sistem mengirim pesan WM_MENUSELECT ke prosedur jendela jendela jendela pemilik menu. Pesan ini mengidentifikasi item menu yang saat ini dipilih. Banyak aplikasi menyediakan area informasi di bagian bawah jendela utamanya dan menggunakan pesan ini untuk menampilkan informasi tambahan tentang item menu yang dipilih.
Saat pengguna memilih item perintah dari menu, sistem mengirim pesan WM_COMMAND ke prosedur jendela. Kata berurutan rendah dari parameter wParam pesan WM_COMMAND berisi pengidentifikasi item yang dipilih. Prosedur jendela harus memeriksa pengidentifikasi dan memproses pesan yang sesuai.
Anda dapat menyimpan informasi untuk menu menggunakan struktur MENUINFO. Jika menu ditentukan dengan MENUINFO.Nilai dwStyle MNS_NOTIFYBYPOS, sistem mengirim WM_MENUCOMMAND alih-alih WM_COMMAND saat item dipilih. Ini memungkinkan Anda mengakses informasi dalam struktur MENUINFO dan juga menyediakan indeks item yang dipilih secara langsung.
Tidak semua menu dapat diakses melalui bilah menu jendela. Banyak aplikasi menampilkan menu pintasan saat pengguna mengklik tombol kanan mouse di lokasi tertentu. Aplikasi tersebut harus memproses pesan WM_CONTEXTMENU dan menampilkan menu pintasan, jika sesuai. Jika aplikasi tidak menampilkan menu pintasan, aplikasi harus meneruskan pesan WM_CONTEXTMENU ke fungsi DefWindowProc untuk pemrosesan default.
Pesan WM_MENURBUTTONUP dikirim ketika pengguna merilis tombol kanan mouse saat kursor berada di item menu. Pesan ini disediakan sehingga aplikasi dapat menampilkan menu peka konteks atau pintasan untuk item menu.
Ada beberapa pesan yang hanya melibatkan menu seret dan letakkan. WM_MENUGETOBJECT dikirim ke pemilik menu seret dan letakkan saat kursor mouse memasukkan item menu atau berpindah dari tengah item ke bagian atas atau bagian bawah item. Pesan WM_MENUDRAG dikirim saat pengguna benar-benar menyeret item menu.
Ketika menu drop-down atau submenu telah dihancurkan, sistem mengirim pesan WM_UNINITMENUPOPUP.
Penghancuran Menu
Jika menu ditetapkan ke jendela dan jendela tersebut dihancurkan, sistem secara otomatis menghancurkan menu dan submenunya, membebaskan handel menu dan memori yang ditempati oleh menu. Sistem tidak secara otomatis menghancurkan menu yang tidak ditetapkan ke jendela. Aplikasi harus menghancurkan menu yang tidak ditetapkan dengan memanggil fungsi DestroyMenu. Jika tidak, menu terus ada dalam memori bahkan setelah aplikasi ditutup. Untuk mengakhiri menu aktif utas panggilan, gunakan EndMenu. Jika platform tidak mendukung EndMenu, kirim pemilik menu aktif pesan WM_CANCELMODE.